#include<set>#include<queue>#include<stack>#include<cmath>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;#define LL long long#define eps le-10#define maxn 100100#define MOD 1000000007#define ls v<<1#define rs v<<1|1int min(int a,int b){return a>b?b:a;}int max(int a,int b){return a>b?a:b;}int absi(int a){return a>0?a:-a;}double abslf(double a){return a>0.0?a:-a;}LL f[maxn],dp[maxn];int main(){LL i,n,m;f[0]=1;for(i=1;i<=100000;i++) f[i]=(f[i-1]*2)%MOD;while(scanf("%lld%lld",&n,&m)!=EOF){if(m>n) puts("0");else if(m==n) puts("1");else if(m==1) printf("%lldn",f[n]-1);else{memset(dp,0,sizeof(dp));dp[m]=1;for(i=m+1;i<=n;i++){dp[i]=((dp[i-1]*2)%MOD+f[i-m-1]-dp[i-m-1]+MOD)%MOD;}printf("%lldn",dp[n]);}}return 0;}


