#include <bits/stdc++.h>
using namespace std;
const long long p = 1E9 + 7;
const int N = 1E6 + 50;
int n, k;
long long ans, t[N], f[N], fac[N], inv[N];
long long Pow(long long a, long long b = p - 2) {
  long long res = 1;
  for (; b; b >>= 1, a = a * a % p)
    if (b & 1) res = res * a % p;
  return res;
}
void init() {
  fac[0] = inv[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % p;
  inv[n] = Pow(fac[n]);
  for (int i = n - 1; i; --i) inv[i] = inv[i + 1] * (i + 1) % p;
}
long long C(int n, int m) {
  if (n < m || n < 0 || m < 0) return 0;
  return fac[n] * inv[m] % p * inv[n - m] % p;
}
int main() {
  scanf("%d%d", &n, &k);
  init();
  if (k >= n || n < 2) return 0 * printf("0");
  for (int i = k + 1 + 1; i <= n; ++i) {
    f[i] = (1LL * (i - k - 1) * fac[i - 2] % p +
            (t[i - 1] - t[i - k - 1]) * fac[i - 2] % p + p) %
           p;
    t[i] = (t[i - 1] + f[i] * inv[i - 1] % p) % p;
  }
  printf("%lld\n", (t[n] * fac[n - 1] % p + p) % p);
  return 0;
}
