const rl = require("readline").createInterface({
input: process.stdin,
output: process.stdout,
});
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
function assignProblem(m, n) {
// 苹果0个 或者 盘子一个
if (m == 0 || n == 1) {
return 1;
}
// 苹果比盘子少
if (m < n) {
return assignProblem(m, m);
}
// 其他情况
return assignProblem(m, n - 1) + assignProblem(m - n, n);
}
void (async function () {
while ((line = await readline())) {
// 一个苹果放在一个盘子里或 不放(空盘子)
// 两个苹果可以放在两个盘子或一个盘子(空一个盘子)
// 若解决方法为f(m,n)
// 那空一个盘子可以用 f(m,n-1)表示
// 剩余的苹果怎么放(至少有一个苹果)?
// 用 f(m-n,n)表示,每个盘子至少一个苹果
const [appleNum, diskNum] = line.split(" ");
const result = assignProblem(Number(appleNum), Number(diskNum));
console.log(result);
}
})();