#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
const long long mod = 1e9 + 7;
long long n, m;
struct mat {
  int a[105][105];
  mat() { memset(a, 0, sizeof(a)); }
  mat operator*(const mat &b) const {
    mat c;
    for (int i = (1); i < (m + 1); i++) {
      for (int j = (1); j < (m + 1); j++) {
        for (int k = (1); k < (m + 1); k++) {
          c.a[i][j] = (c.a[i][j] + a[i][k] % mod * b.a[k][j] % mod) % mod;
        }
      }
    }
    return c;
  }
};
mat mod_pow(mat x, long long n) {
  mat res;
  for (int i = (1); i < (m + 1); i++) res.a[i][i] = 1;
  while (n > 0) {
    if (n & 1) res = res * x;
    x = x * x;
    n >>= 1;
  }
  return res;
}
int main() {
  cin >> n >> m;
  mat b, x, ans;
  for (int i = (1); i < (m + 1); i++) b.a[i][1] = 1;
  for (int i = (2); i < (m + 1); i++) x.a[i][i - 1] = 1;
  x.a[1][1] = 1;
  x.a[1][m] = 1;
  ans = mod_pow(x, n - m + 1) * b;
  cout << ans.a[1][1];
  return 0;
}
