Problem: Professional sport is more than hard work. It also is the equipment, designed by top engineers. As an example, let's take tennis. Not only should you be in great shape, you also need an excellent racket! In this problem your task is to contribute to the development of tennis and to help to design a revolutionary new concept of a racket!

The concept is a triangular racket. Ant it should be not just any triangle, but a regular one. As soon as you've chosen the shape, you need to stretch the net. By the time you came the rocket had n holes drilled on each of its sides. The holes divide each side into equal n + 1 parts. At that, the m closest to each apex holes on each side are made for better ventilation only and you cannot stretch the net through them. The next revolutionary idea as to stretch the net as obtuse triangles through the holes, so that for each triangle all apexes lay on different sides. Moreover, you need the net to be stretched along every possible obtuse triangle. That's where we need your help — help us to count the number of triangles the net is going to consist of.

Two triangles are considered to be different if their pictures on the fixed at some position racket are different.

Input

The first and the only input line contains two integers n, m <image>.

Output

Print a single number — the answer to the problem.

Examples

Input

3 0


Output

9


Input

4 0


Output

24


Input

10 1


Output

210


Input

8 4


Output

0

Note

For the following picture n = 8, m = 2. White circles are the holes for ventilation, red circles — holes for net stretching. One of the possible obtuse triangles is painted red. 

<image>

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.*;

public class D_opt3 {

	BufferedReader br;
	PrintWriter out;
	StringTokenizer st;
	boolean eof;

	int n;
	int dn1;
	int m;

	long solve() {
		long start = System.currentTimeMillis();
		dn1 = (n + 1) * 2;
		long ans = 0;
		for (int i = 2 * (m + 1); i <= n + 1; i += 2) {
			int shiftI = (i == n + 1) ? 0 : 1;

			int tmp = dn1 - i;
			int num = (i - (m + 1)) * tmp - 1;
			int denom = i + (m + 1) * 2;
			

			
			for (int j = m + 1; j < i; j++, num -= tmp, denom += 2) {

				int k = num / denom;
				if (k >= n - m)
					k = n - m;
				if (k >= m)
					ans += (k - m) << shiftI;
			}
		}

//		System.err.println(System.currentTimeMillis() - start);
		return 3 * ans;
	}

	D_opt3() throws IOException {
		br = new BufferedReader(new InputStreamReader(System.in));
		out = new PrintWriter(System.out);
		n = nextInt();
		m = nextInt();
		out.println(solve());
		out.close();
	}

	public static void main(String[] args) throws IOException {
		new D_opt3();
	}

	String nextToken() {
		while (st == null || !st.hasMoreTokens()) {
			try {
				st = new StringTokenizer(br.readLine());
			} catch (Exception e) {
				eof = true;
				return null;
			}
		}
		return st.nextToken();
	}

	String nextString() {
		try {
			return br.readLine();
		} catch (IOException e) {
			eof = true;
			return null;
		}
	}

	int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}

	long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}

	double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}
}