#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
const int P = 924844033;
int n, d, len = 1, f[N][2], g[N][2];
long long fac[N];
int main() {
  scanf("%d%d", &n, &d), fac[0] = fac[1] = 1, f[0][0] = g[0][0] = 1;
  for (int i = 2; i <= n; i++) fac[i] = fac[i - 1] * i % P;
  for (int i = 1; i <= d; i++) {
    for (int j = 1; j <= len; j++)
      g[j][0] = (g[j][0] + g[j][1]) % P, g[j][1] = 0;
    for (int j = i + d; j <= n; j += d, ++len) {
      for (int k = 1; k <= len; k++) {
        f[k][0] = (g[k][0] + g[k][1]) % P;
        f[k][1] = g[k - 1][0];
      }
      for (int k = 1; k <= len; k++) {
        g[k][0] = f[k][0];
        g[k][1] = f[k][1];
      }
    }
  }
  for (int i = d + 1; i <= d * 2; i++) {
    for (int j = 1; j <= len; j++)
      g[j][0] = (g[j][0] + g[j][1]) % P, g[j][1] = 0;
    for (int j = i; j <= n; j += d, ++len) {
      for (int k = 1; k <= len; k++) {
        f[k][0] = (g[k][0] + g[k][1]) % P;
        f[k][1] = g[k - 1][0];
      }
      for (int k = 1; k <= len; k++) {
        g[k][0] = f[k][0];
        g[k][1] = f[k][1];
      }
    }
  }
  long long ans = fac[n];
  for (int i = 1; i < len; i++)
    ans = (ans + (i & 1 ? -1 : 1) * fac[n - i] * (f[i][0] + f[i][1]) % P) % P;
  printf("%lld\n", (ans + P) % P);
  return 0;
}
