#define mafuu signed
#define Chino main

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>

#define maxn 2005
#define inf 0x3f3f3f3f
#define px putchar
#define pn px('\n')
#define ps px(' ')
#define pd puts("======================")
#define pj puts("++++++++++++++++++++++")

const int mod = 924844033;

using namespace std;

inline int read(){
	int x=0,y=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')y=1;ch=getchar();}
	while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return y?-x:x;
}
template<typename T>
inline T read(){
	T x=0;
	int y=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')y=1;ch=getchar();}
	while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return y?-x:x;
}
int f[maxn],c[maxn][maxn],g[maxn][maxn][3],fac[maxn]={1},n,m,ans;
inline long long pow1(int x){return x&1?-1ll:1ll;}
mafuu Chino(){
	n=read(),m=read();
	for(register int i=1;i<=n;++i)fac[i]=1ll*fac[i-1]*i%mod;
	if(!m){
		c[0][0]=1;
		for(register int i=1;i<=n;++i){
			c[i][0]=1;
			for(register int j=1;j<=i;++j)
				c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
		}
		for(register int i=0;i<=n;++i)
			(ans+=pow1(i)*c[n][i]*fac[n-i]%mod)%=mod;
		printf("%d\n",(ans+mod)%mod);
		return 0;
	}
	for(register int i=1;i<=min(m<<1,n);++i){
		g[i][0][2]=1;
		if(i-m>0)g[i][1][0]=1;
		if(i+m<=n)g[i][1][1]=1;
	}
	for(register int i=(m<<1)+1;i<=n;++i){
		int x=i-(m<<1);
		for(register int j=0;j<=n;++j){
			if(j&&i-m>0)g[i][j][0]=(g[x][j-1][0]+g[x][j-1][2])%mod;
			if(j&&i+m<=n)g[i][j][1]=((g[x][j-1][0]+g[x][j-1][1])%mod+g[x][j-1][2])%mod;
			g[i][j][2]=((g[x][j][0]+g[x][j][1])%mod+g[x][j][2])%mod;
		}
	}
	f[0]=1;
	int sum=0,cnt;
	for(register int i=max(n-(m<<1)+1,1);i<=n;++i){
		cnt=(i-1)/(m<<1)+1,sum+=cnt;
		for(register int j=sum;j;--j)
			for(register int k=min(j,cnt);k;--k)
				(f[j]+=1ll*f[j-k]*((g[i][k][0]+g[i][k][1])%mod+g[i][k][2])%mod)%=mod;
	}
	for(register int i=0;i<=n;++i)
		(ans+=pow1(i)*f[i]*fac[n-i]%mod)%=mod;
	printf("%d\n",(ans+mod)%mod);
}
