#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const int maxn = 4e5;
const int maxm = 900;
const int INF = 0x7fffffff;
const int mod = 1e9 + 7;
const double eps = 1e-7;
const double Pi = acos(-1.0);
inline int read_int() {
  char c;
  int ret = 0, sgn = 1;
  do {
    c = getchar();
  } while ((c < '0' || c > '9') && c != '-');
  if (c == '-')
    sgn = -1;
  else
    ret = c - '0';
  while ((c = getchar()) >= '0' && c <= '9') ret = ret * 10 + (c - '0');
  return sgn * ret;
}
inline long long read_ll() {
  char c;
  long long ret = 0, sgn = 1;
  do {
    c = getchar();
  } while ((c < '0' || c > '9') && c != '-');
  if (c == '-')
    sgn = -1;
  else
    ret = c - '0';
  while ((c = getchar()) >= '0' && c <= '9') ret = ret * 10 + (c - '0');
  return sgn * ret;
}
int dp[maxn + 5], sum[maxm + 5], r, g, res;
int main() {
  for (int i = 1; i <= maxm; ++i) sum[i] = i;
  for (int i = 1; i <= maxm; ++i) sum[i] += sum[i - 1];
  r = read_int(), g = read_int();
  if (r > g) swap(r, g);
  dp[r] = 1;
  for (int i = 1; i <= maxm && sum[i] <= r + g; ++i) {
    bool flag = false;
    int ans = 0;
    for (int j = 0; j <= r; ++j) {
      if (j + i > r && sum[i] + j - r <= g)
        ans = (ans + dp[j]) % mod, flag = true;
      else if (sum[i] + j - r > g && j + i <= r) {
        dp[j] = dp[j + i];
        ans = (ans + dp[j]) % mod;
        flag = true;
      } else if (sum[i] + j - r <= g && j + i <= r) {
        dp[j] = (dp[j] + dp[j + i]) % mod, flag = true;
        ans = (ans + dp[j]) % mod;
      } else
        dp[j] = 0;
    }
    if (!flag)
      break;
    else
      res = ans;
  }
  printf("%d\n", res);
  return 0;
}
