public class Main{
public static void main(String[] args) { Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int m = sc.nextInt();
int n = sc.nextInt();
int[][] f = new int[m+1][n+1];
/*
* 设f[m][n]为m个苹果,n个盘子时,有几种放法。
* f[m][n]分情况讨论:
* 一、当m<n,苹果少于盘子,则一定有空的盘子,所以f[m][n]=f[m][m];
* 二、当m>=n,苹果多于盘子,则可以有空的盘子,也可以没有空的盘子。
* (1)当没有空的盘子,则每个盘子至少有一个苹果。将这个苹果与盘子看做一个整体的新盘子,
* 则要求的就是将m-n个苹果放入n个盘子的情况,所以f[m][n]=f[m-n][n];
* (2)当有空盘子时,至少存在一个空盘子,此空盘子对于放法不会产生影响,所以f[m][n]=f[m][n-1]。
* 0<=m<=10;1<=n<=10;
* f[0][n] = 1;0个苹果放入n个盘子,只有一种放法。
* f[1][n] = 1;1个苹果放入n个盘子,只有一种放法。
* f[m][1] = 1;m个苹果放入1个盘子,只有一种放法。
* */
for(int i=0;i<=m;i++){
for(int j=1;j<=n;j++){
if(i==0||i==1||j==1){
f[i][j] = 1;
}
else{
if(i<j){
f[i][j] = f[i][i];
}
else{
f[i][j] = f[i-j][j]+f[i][j-1];
}
}
//System.out.println("m: "+i+" n: "+j+" f[m][n]: "+f[i][j]);
}
}
System.out.println(f[m][n]);
}
}
}