#include <bits/stdc++.h>
using namespace std;
const int N=4010;
const int mod=924844033;
int i,j,k,n,m,x,y,t,f[N][N][2],g[N],e[N],en[N],l,b[N],fac[N];
void dfs(int x){
	b[x]=1;e[++l]=x;
	if (x>n){
		if (x-n+k>n)en[l+1]=1;
		else dfs(x-n+k);
	}
	else{
		if (x+n+k>n*2)en[l+1]=1;
		else dfs(x+n+k);
	}
}
int add(int x,int y){x+=y;if (x>=mod)x-=mod;if (x<0)x+=mod;return x;}
int main(){
	scanf("%d%d",&n,&k);
	for (i=1;i<=n;i++){
		if (!b[i])dfs(i);
		if (!b[i+n])dfs(i+n);
	}
	f[1][0][0]=1;
	for (i=2;i<=l;i++)
		for (j=0;j<=n;j++){
			f[i][j][0]=add(f[i][j][0],add(f[i-1][j][0],f[i-1][j][1]));
			if (j&&!en[i])f[i][j][1]=add(f[i][j][1],f[i-1][j-1][0]);
		}
	fac[0]=1;for (i=1;i<=n;i++)fac[i]=1ll*i*fac[i-1]%mod;
	for (i=0;i<=n;i++)g[i]=1ll*add(f[l][i][0],f[l][i][1])*fac[n-i]%mod;
//	for (i=0;i<=n;i++)printf("%d\n",g[i]);
//	for (i=1;i<=l;i++)printf("%d ",e[i]);printf("\n");
//	for (i=1;i<=l;i++)printf("%d ",en[i]);printf("\n");
	int ans=0;
	for (i=0;i<=n;i++)if (i&1)ans=add(ans,-g[i]);else ans=add(ans,g[i]);
	printf("%d\n",ans);
	return 0;
}