#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-11;
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
const int maxsize = 5000000 + 5;
int p[maxsize], a[maxsize];
bool visited[maxsize * 3];
int main() {
  int mb, mc;
  scanf("%d%d", &mb, &mc);
  memset(p, 255, (mc + 1) * sizeof(int));
  for (int k = 2; k <= mc; k++)
    if (p[k] < 0)
      for (int i = k; i <= mc; i += k) p[i] = k;
  long long R = 0;
  for (int b = 1; b <= mb; b++) R += min((long long)b * b, (long long)mc);
  memset(visited, false, sizeof(visited));
  for (int c = 1; c <= mc; c++) {
    a[0] = 1;
    int n = 1;
    for (int d = c; d > 1;) {
      int g = p[d], e = 0;
      for (; d % g == 0; d /= g) e++;
      int new_n = n * (e + 1);
      for (int i = n; i < new_n; i++) a[i] = a[i - n] * g;
      n = new_n;
    }
    for (int i = 0; i < n; i++) {
      int x = a[i];
      int b = c / x + x;
      if (b & 1) continue;
      b /= 2;
      if (b <= mb && b >= x && b >= 1) {
        visited[-b + (b - x) + maxsize + maxsize] =
            visited[-b - (b - x) + maxsize + maxsize] = true;
        R--;
      }
    }
  }
  R *= 2;
  for (int i = 0; i < maxsize * 3; i++)
    if (visited[i]) R++;
  cout << R << endl;
  return 0;
}
