Problem:
How many ways?

Write a program which identifies the number of combinations of three integers which satisfy the following conditions:

You should select three distinct integers from 1 to n.

A total sum of the three integers is x.

For example, there are two combinations for n = 5 and x = 9.

1 + 3 + 5 = 9

2 + 3 + 4 = 9

Input

The input consists of multiple datasets. For each dataset, two integers n and x are given in a line.

The input ends with two zeros for n and x respectively. Your program should not process for these terminal symbols.

Constraints

3 ≤ n ≤ 100

0 ≤ x ≤ 300

Output

For each dataset, print the number of combinations in a line.

Sample Input

5 9
0 0

Sample Output

2

Note

      解説

Solution in JavaScript (judge verdict: Accepted)

const fs = require('fs');

const createMemoizedFunction = (func, serializeFunc = JSON.stringify) => {
  let memo = new Map();
  const memoized = (...args) => {
    const key = serializeFunc(args);
    if (!memo[key]) {
      memo[key] = func(...args);
    }

    return memo[key];
  };

  return memoized;
};

const select = createMemoizedFunction((nums, m) => {
  if (m === 1) {
    return nums.map((n) => [n]);
  } else {
    const [fst, ...rest] = nums;
    return [
      ...(rest.length >= m ? select(rest, m) : []),
      ...select(rest, m - 1).map(c => [fst, ...c])
    ];
  }
});

const solve = (n, x) => {
  const nums = [...new Array(n).keys()].map(n => n + 1);
  return select(nums, 3).filter(c => c.reduce((prev, cur) => prev + cur) === x);
};

const main = input => {
  const result = input
    .split(/(\r)?\n/g)
    .filter(s => !!s && s !== "0 0")
    .map(s => {
      const [fst, snd] = s.split(" ");
      return solve(parseInt(fst), parseInt(snd)).length;
    }).join("\n");

  console.log(result);
}

main(fs.readFileSync('/dev/stdin', 'UTF-8'));