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);
    }
})();