#include <bits/stdc++.h>
using namespace std;
const int64_t MOD = 1e9 + 7;
void add(int64_t& a, int64_t b) { a = (a + b) % MOD; }
void mul(int64_t& a, int64_t b) { a = a * b % MOD; }
vector<int64_t> fact, seq_inv, fact_inv;
void create_fact_mod(int num) {
  fact[0] = fact[1] = 1;
  for (int i = 2; i <= num; i++) fact[i] = fact[i - 1] * i % MOD;
}
void create_seq_inv_mod(int num) {
  seq_inv[0] = seq_inv[1] = 1;
  for (int i = 2; i <= num; i++)
    seq_inv[i] = (MOD - MOD / i) * seq_inv[MOD % i] % MOD;
}
void create_fact_inv_mod(int num) {
  fact_inv[0] = fact_inv[1] = 1;
  for (int i = 2; i <= num; i++)
    fact_inv[i] = fact_inv[i - 1] * seq_inv[i] % MOD;
}
void create_mod_tables(int num) {
  fact.resize(num + 1);
  seq_inv.resize(num + 1);
  fact_inv.resize(num + 1);
  create_fact_mod(num);
  create_seq_inv_mod(num);
  create_fact_inv_mod(num);
}
int64_t comb_mod(int n, int k) {
  return fact[n] * fact_inv[n - k] % MOD * fact_inv[k] % MOD;
}
int64_t perm_mod(int n, int k) { return fact[n] * fact_inv[n - k] % MOD; }
int64_t power_mod(int64_t num, int64_t power) {
  int64_t prod = 1;
  num %= MOD;
  while (power > 0) {
    if (power & 1) prod = prod * num % MOD;
    num = num * num % MOD;
    power >>= 1;
  }
  return prod;
}
int64_t extgcd(int64_t a, int64_t b, int64_t& x, int64_t& y) {
  int64_t d = a;
  if (b != 0) {
    d = extgcd(b, a % b, y, x);
    y -= (a / b) * x;
  } else {
    x = 1;
    y = 0;
  }
  return d;
}
int64_t inv_mod(int64_t a) {
  int64_t x, y;
  extgcd(a, MOD, x, y);
  return (MOD + x % MOD) % MOD;
}
int main() {
  int N, K;
  cin >> N >> K;
  create_mod_tables(N);
  vector<int64_t> ng(N), S(N);
  int64_t ngs = 0;
  for (int i = 0; i < N; i++) {
    mul(ngs, i);
    add(ngs, ng[i]);
    S[i] = ngs;
    int64_t now = (MOD + fact[i] - ngs) % MOD;
    if (i + K + 1 < N)
      ng[i + K + 1] = now * comb_mod(K + i, K) % MOD * fact[K] % MOD;
  }
  int64_t ans = 0;
  for (int i = 0; i < N; i++) {
    int64_t res = comb_mod(N - 1, i) * S[i] % MOD * fact[N - 1 - i] % MOD;
    add(ans, res);
  }
  cout << ans << endl;
  return 0;
}
