#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=2050,mod=924844033;
int fac[M],rfac[M],a[M],b[M],n,k,i,s;
int mul(int a,int b)
{
return a*(ll)b%mod;
}
int ad(int a,int b)
{
return(a+b)%mod;
}
int de(int a,int b)
{
return(a-b)%mod;
}
int pow(int a,int b)
{
int s=1;
while(b)
{
if(b&1)s=mul(s,a);
a=mul(a,a);
b>>=1;
}
return s;
}
int rev[M],N,iN;
void pre(int n)
{
int i,k;
for(N=1,k=0; N<n; N<<=1)k++;
for(i=0; i<N; i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<(k-1));
iN=pow(N,mod-2);
}
void ntt(int*a,int on)
{
int i,j,k,t,w,wn;
for(i=0; i<N; i++)
{
if(i<rev[i])swap(a[i],a[rev[i]]);
}
for(i=2; i<=N; i<<=1)
{
wn=pow(5,on==1?(mod-1)/i:mod-1-(mod-1)/i);
for(j=0; j<N; j+=i)
{
w=1;
for(k=0; k<i>>1; k++)
{
t=mul(w,a[i/2+j+k]);
a[i/2+j+k]=de(a[j+k],t);
a[j+k]=ad(a[j+k],t);
w=mul(w,wn);
}
}
}
if(on==-1)
{
for(i=0; i<N; i++)a[i]=mul(a[i],iN);
}
}
int C(int n,int k)
{
return n<k?0:mul(fac[n],mul(rfac[k],rfac[n-k]));
}
int main()
{
scanf("%d%d",&n,&k);
fac[0]=1;
for(i=1; i<=n; i++)fac[i]=mul(fac[i-1],i);
rfac[n]=pow(fac[n],mod-2);
for(i=n; i>0; i--)rfac[i-1]=mul(rfac[i],i);
pre(n+1);
for(i=0; i<=n; i++)
{
a[i]=C(n/k-i,i);
b[i]=C(n/k+1-i,i);
}
ntt(a,1);
ntt(b,1);
for(i=0; i<N; i++)a[i]=mul(pow(a[i],(k-n%k)*2),pow(b[i],n%k*2));
ntt(a,-1);
for(i=0; i<=n; i++)(s+=(i&1?-1:1)*mul(fac[n-i],a[i]))%=mod;
printf("%d",(s+mod)%mod);
}