#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define fio ios_base::sync_with_stdio(false);cin.tie(NULL);
#define MOD (lli)1000000007
int m;
lli** mult(lli** A, lli** B)
{
lli** C = (lli**)malloc(m * sizeof(lli*));
for (int i = 0; i < m; i++)
C[i] = (lli*)malloc(m * sizeof(lli));
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
for (int k = 0; k < m; k++) {
C[i][j] += ((A[i][k] % MOD) * (B[k][j] % MOD)) % MOD;
if(C[i][j] > MOD) C[i][j] -= MOD;
}
}
}
return C;
}
lli** expM(lli** A, lli n)
{
if (n == 1)
return A;
else if ((n % 2) == 1)
return mult(A, expM(A, n - 1));
else{
lli** aux = expM(A, n / 2);
return mult(aux, aux);
}
}
int main()
{
lli n;
cin >> n >> m;
if(n < m) printf("1\n");
else if(n == m) printf("2\n");
else{
lli** T = (lli**)malloc(m * sizeof(lli*));
for (int i = 0; i < m; i++)
T[i] = (lli*)malloc(m * sizeof(lli));
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++)
T[i][j] = 0;
}
for (int i = 0; i < m - 1; i++)
T[i][i + 1] = 1;
T[m - 1][0] = 1;
T[m - 1][m - 1] = 1;
lli** expT = expM(T, n - 1);
lli ans = 0;
for (int j = 0; j < m - 1; j++) {
ans += expT[0][j];
if(ans > MOD) ans -= MOD;
}
ans += (expT[0][m-1]%MOD + expT[0][m-1]%MOD)%MOD;
if(ans > MOD) ans -= MOD;
printf("%lld\n", ans);
}
return 0;
}