#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
int n;
int m;
pair<int, int> v[12000000];
long long mysqrt(long long x) {
  long long y = sqrt(x);
  while (((y + 1) * (y + 1)) <= x) y++;
  return y;
}
long long calc(long long x) {
  if (x < 1) return 0;
  return mysqrt(x);
}
bool l1(pair<int, int> a, pair<int, int> b) { return a.second < b.second; }
int main() {
  scanf("%d%d", &n, &m);
  long long ans = 0;
  for (long long a = -n; a < 0; a++) {
    long long l = max(a * a - m, (long long)1);
    long long r = max(a * a - 1, (long long)1);
    ans += (r - l + 1) - calc(r) + calc(l - 1);
  }
  ans *= 2;
  int o = 0;
  for (long long b = 1; b <= n; b++) {
    long long r = mysqrt(b * b - 1);
    long long l = mysqrt(max(b * b - m, (long long)0));
    while (l * l < b * b - m) l++;
    if (l <= r) {
      v[o++] = make_pair(-b - r, -b - l);
      v[o++] = make_pair(-b + l, -b + r);
    }
  }
  sort(v, v + o, l1);
  pair<int, int> c;
  for (int i = 0; i < o; i++) {
    if (i > 0 && v[i].first <= c.second)
      c.second = v[i].second;
    else
      c = v[i];
    if (i + 1 == o || v[i + 1].first > c.second) ans += c.second - c.first + 1;
  }
  cout << ans << endl;
  return 0;
}
