#include <bits/stdc++.h>
using namespace std;
int n, K, h[4009][2], l[4009][2], sum = 0, sn = 0, c[4009];
int dp[4009][4009][2], ans[4009], jc[4009], fin = 0ll;
const long long mod = 924844033;
bool ind[4009][4009];
int read();
void add(int x, int y) {
  sn++;
  if (!l[x][0])
    l[x][0] = y;
  else
    l[x][1] = y;
  if (!h[y][0])
    h[y][0] = x;
  else
    h[y][1] = x;
}
void find(int x, int y) {
  ind[x][y] = true;
  sum++;
  for (int i = 0; i <= 1; i++) {
    if (l[x][i] && !ind[x][l[x][i]]) find(x, l[x][i]);
    if (h[y][i] && !ind[h[y][i]][y]) find(h[y][i], y);
  }
}
void set_pre() {
  c[0] = 1;
  jc[0] = 1ll;
  for (int i = 1; i <= 4000; i++) c[i] = c[i - 1] * -1;
  for (int i = 1; i <= 4000; i++) {
    long long t = 1ll * jc[i - 1] * i % mod;
    jc[i] = t;
  }
}
int main() {
  n = read(), K = read();
  dp[0][0][0] = 1;
  ans[0] = 1;
  set_pre();
  for (int i = 1; i <= n << 1; i++) {
    dp[i][0][0] = 1;
    for (int j = 1; j <= i; j++)
      dp[i][j][0] = (dp[i - 1][j][0] + dp[i - 1][j][1]) % mod,
      dp[i][j][1] = dp[i - 1][j - 1][0];
  }
  for (int i = 1; i <= n; i++) {
    if (i - K >= 1) add(i, i - K);
    if (i + K <= n) add(i, i + K);
  }
  for (int i = 1; i <= n; i++)
    if (l[i][0] && !ind[i][l[i][0]]) {
      sum = 0;
      find(i, l[i][0]);
      for (int j = sn; j; j--)
        for (int k = 1; k <= min(j, sum); k++) {
          long long t =
              (long long)(1ll * ans[j - k] *
                              ((dp[sum][k][0] + dp[sum][k][1]) % mod) % mod +
                          ans[j]) %
              mod;
          ans[j] = t;
        }
    } else if (l[i][1] && !ind[i][l[i][1]]) {
      sum = 0;
      find(i, l[i][1]);
      for (int j = sn; j; j--)
        for (int k = 1; k <= min(j, sum); k++) {
          long long t =
              (long long)(1ll * ans[j - k] *
                              ((dp[sum][k][0] + dp[sum][k][1]) % mod) % mod +
                          ans[j]) %
              mod;
          ans[j] = t;
        }
    }
  for (int i = 0; i <= n; i++)
    fin = (long long)(1ll * ans[i] * c[i] * jc[n - i] % mod + fin + mod) % mod;
  printf("%lld\n", fin);
  return 0;
}
int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (c > '9' || c < '0') f = (c == '-') ? -1 : f, c = getchar();
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  return x * f;
}
