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 Rust (judge verdict: Accepted)



fn main() {
    loop {
        let (n, x) = read_tuple::<i64>();

        if n == 0 && x == 0 {
            break;
        }

        println!("{}", dfs(n, x, &mut vec![]));
    }
}

fn dfs(n: i64, x: i64, seq: &mut Vec<i64>) -> i64 {
    if seq.len() == 3 {
        return (seq.iter().sum::<i64>() == x) as i64 
    }

    let mut ans = 0;
    let v: i64 = *seq.last().unwrap_or(&0) + 1;
    for i in v..(n + 1) {
        seq.push(i);
        ans += dfs(n, x, seq);
        seq.pop();
    }

    ans
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().split_whitespace()
        .map(|e| e.parse().ok().unwrap()).collect()
}

fn read_tuple<T: std::str::FromStr + Copy>() -> (T, T) {
    let temp = read_vec();
    (temp[0], temp[1])
}