#include<iostream> #include<cstdio> #include<list> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<stack> #include<map> #include<vector> #include<cmath> #include<memory.h> #define ll long long #define LL __int64 using namespace std; #define MOD 1000000007 int dp[100012]; int degree[100012]; int n,m; void clear() { memset(dp,0,sizeof(dp)); } void init() { /*memset(degree,1,sizeof(degree));*/ for(int i=0;i<100002;i++) degree[i]=1; for(int i=1;i<100012;i++) degree[i]=degree[i-1]*2%MOD; } int main() { init(); while(scanf("%d %d",&n,&m)==2) { clear(); dp[m]=1; for(int i=m+1;i<=n;i++) dp[i]=((dp[i-1]*2%MOD+degree[i-(m+1)]-dp[i-(m+1)])%MOD+MOD)%MOD; printf("%d\n",dp[n]); } return 0; }