#include <stdio.h>
int main(int argc, const char * argv[]){
int a[120][120];
int n, m;
scanf("%d %d", &n, &m);
// 初始化
for(int i=1; i<=n; i++){
a[i][0] = 0;
a[0][i] = 0;
a[i][1] = 1;
if(i==1){
a[1][i] = 1;
}else{
a[1][i] = 0;
}
}
// 进行计算
for(int i=2; i<=n; i++){
for(int j=2; j<=m; j++){
if(i>=j){
// [1,j,i]
// 分解 [j-1, j] + [j][j] + [j+1][j]
// 1~j-1,可以成为组合的加数,即用1到j-1表示j,=> a[j-1][j]
// j, 可以成为组合的加数,即刚好单个加数{j}表示j, => 1
// j+1~j, 由于这些数都大于j,不可能成为加数 => 0
a[i][j] = a[j-1][j] + 1;
}else{
// [1,i,j]
// 分解 [i-1][j] + [i-1][j-i]
// 加数中无i,从1~i-1中挑选几个数的和等于j => a[i-1][j]
// 加数中有i,从1~i-1中挑选几个数的和加上i等于j,相当于,从1~i-1中挑选几个数的和等于 j-i => a[i-1][j-i]
a[i][j] = a[i-1][j] + a[i-1][j-i];
}
}
}
printf("%d", a[n][m]);
return 0;
}