#include <bits/stdc++.h>
using namespace std;
struct seg {
  int a, op;
  seg() {}
  seg(int x, int y) : a(x), op(y) {}
  bool operator<(seg &cmp) const {
    if (a == cmp.a) return op > cmp.op;
    return a < cmp.a;
  }
};
vector<seg> ss;
bool cmp(seg a, seg b) {
  if (a.a == b.a) return a.op > b.op;
  return a.a < b.a;
}
long long calc() {
  sort(ss.begin(), ss.end(), cmp);
  long long ret = 0, s = 0, cnt = 0;
  for (int i = 0; i < ss.size(); i++) {
    if (ss[i].op == 1) {
      if (cnt == 0) {
        s = ss[i].a;
      }
      cnt++;
    } else {
      cnt--;
      if (cnt == 0) {
        ret += ss[i].a - s + 1;
      }
    }
  }
  return ret;
}
int main() {
  int n, m;
  while (~scanf("%d%d", &n, &m)) {
    ss.clear();
    long long ret = 0;
    for (long long b = 1; b <= n; b++) {
      long long b2 = b * b;
      long long add = m;
      if (b2 < m) add = b2;
      long long limit = b;
      for (long long bb = b - 1; bb >= 0; bb--) {
        int c = b2 - bb * bb;
        if (c > m) {
          break;
        }
        limit--;
        add--;
      }
      if (limit != b) {
        ss.push_back(seg(-b + limit, 1));
        ss.push_back(seg(-1, -1));
        ss.push_back(seg(-b - b + 1, 1));
        ss.push_back(seg(-b - limit, -1));
      }
      ret += add;
    }
    cout << ret * 2 + calc() << endl;
  }
  return 0;
}
