//package com.info.dao;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
final static int maxn = 1005;
public static void main(String[] args)
{
Scanner cin =new Scanner(System.in);
while(cin.hasNext())
{
int n,k;
n=cin.nextInt();
k=cin.nextInt();
BigInteger[] dp=new BigInteger[maxn];
Arrays.fill(dp,BigInteger.ZERO );
dp[0] = BigInteger.ONE;
for(int i=1;i<=k;i++)
for(int j=i;j<=n;j++)
dp[j] = dp[j].add(dp[j-i]) ;///+ dp[j-i];
System.out.println(dp[n]);
}
}
}
#include <stdio.h>
#include <string.h>
long long dp[1000+10],pre[1000+10],inf;
int main()
{
int n,k;
int i,j;
inf=1;
for(int i=1;i<=18;i++)
{
inf=10*inf;
}
//printf("%lld\n",inf);
while(scanf("%d%d",&n,&k)!=EOF)
{
// dp[1]=1;
// if(n==0)
// {
// printf("0\n");
// continue;
// }
memset(pre,0,sizeof(pre));
memset(dp,0,sizeof(dp));
dp[0]=1;
for(i=1;i<=k;i++)
{
for(j=i;j<=n;j++)
{
pre[j]=pre[j]+pre[j-i]+(dp[j]+dp[j-i])/inf;
dp[j]=(dp[j]+dp[j-i])%inf;
}
//dp[j]+=dp[j-i];
}
// for(i=0;i<=n;i++)
// printf("%d ",dp[i]);
if(pre[n]) printf("%lld",pre[n]);
printf("%lld\n",dp[n]);
}
return 0;
}