#include <bits/stdc++.h>
using namespace std;
long long fact[1000001];
long long extgcd(long long a, long long b, long long &x, long long &y) {
  long long d = a;
  if (b != 0LL) {
    d = extgcd(b, a % b, y, x);
    y -= (a / b) * x;
  } else {
    x = 1;
    y = 0;
  }
  return d;
}
long long mod_inverse(long long a, long long m) {
  long long x, y;
  extgcd(a, m, x, y);
  return (m + x % m) % m;
}
long long add(long long x, long long y) {
  x += y;
  if (x >= 1000000007LL) x %= 1000000007LL;
  return x;
}
long long mul(long long x, long long y) { return x * y % 1000000007LL; }
long long sub(long long x, long long y) {
  x -= y;
  if (x < 0LL) x += 1000000007LL;
  return x;
}
long long dp[1000001];
long long sum[1000001];
int main(void) {
  fact[0] = 1;
  for (long long i = 1; i <= 1000000; i++) {
    fact[i] = (long long)fact[i - 1] * i % 1000000007LL;
  }
  int n, k;
  scanf("%d%d", &n, &k);
  if (k >= n - 1) {
    printf("0\n");
    return 0;
  }
  for (int i = k + 1; i <= n; i++) {
    dp[i] = mul(i - k - 1LL, fact[i - 2]);
    dp[i] = add(dp[i], mul(fact[i - 2], sub(sum[i - 1], sum[i - k - 1])));
    sum[i] = add(sum[i], sum[i - 1]);
    sum[i] = add(sum[i], mul(dp[i], mod_inverse(fact[i - 1], 1000000007LL)));
  }
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    long long v = mul(dp[i], fact[n - 1]);
    v = mul(v, mod_inverse(fact[i - 1], 1000000007LL));
    ans = add(ans, v);
  }
  printf("%lld\n", ans);
  return 0;
}
