#include <bits/stdc++.h>
int n, m;
unsigned int L, R;
inline bool check(unsigned int A, unsigned int B, unsigned int i) {
  return 2 * i * i + n * A + A * B < i * (2 * n + A - B);
};
inline bool check(unsigned int a, unsigned int b) {
  unsigned int p = (2 * n + a - b) >> 2;
  if (p >= L && p <= R && check(a, b, p)) return 1;
  ++p;
  if (p >= L && p <= R && check(a, b, p)) return 1;
  if (check(a, b, L)) return 1;
  if (check(a, b, R)) return 1;
  return 0;
};
inline int get_l(unsigned int a, unsigned int b, int l, int r) {
  while (l < r) {
    int mid = (l + r) >> 1;
    if (check(a, b, mid))
      r = mid;
    else
      l = mid + 1;
  };
  return l;
};
inline int get_r(unsigned int a, unsigned int b, int l, int r) {
  while (l < r) {
    int mid = (l + r + 1) >> 1;
    if (check(a, b, mid))
      l = mid;
    else
      r = mid - 1;
  };
  return l;
};
inline void get(unsigned int a, unsigned int b, int &l, int &r) {
  if (check(a, b, L)) {
    l = L;
    r = get_r(a, b, L, R);
  } else if (check(a, b, R)) {
    r = R;
    l = get_l(a, b, L, R);
  } else {
    unsigned int p = (2 * n + a - b) >> 2;
    if (!check(a, b, p)) ++p;
    l = get_l(a, b, L, p);
    r = get_r(a, b, p, R);
  };
};
inline int calc(int d) {
  unsigned int a = m + 1, b = a + d;
  if (!check(a, b)) return 0;
  int l, r;
  get(a, b, l, r);
  int ret = 0;
  while (b <= R) {
    ret += r - l + 1;
    ++a;
    ++b;
    while (l <= r && !check(a, b, l)) ++l;
    if (l > r) return ret;
    while (!check(a, b, r)) --r;
  };
  return ret;
};
int main() {
  scanf("%d%d", &n, &m);
  ++n;
  L = m + 1;
  R = n - m - 1;
  int i;
  long long ans = calc(0);
  for (i = 1; i < n - 2 * m; i++) {
    ans += 2 * calc(i);
  };
  printf("%I64d\n", ans * 3);
}
