#include <bits/stdc++.h>
using namespace std;
bool pr[1000007];
void sieve() {
  pr[0] = 1;
  pr[1] = 1;
  for (int i = 2; i * i < (1000007); i++) {
    for (int j = 2 * i; j <= 1000007; j += i) {
      pr[j] = 1;
    }
  }
}
long long fpow(long long x, long long y) {
  x = x % 1000000007;
  long long res = 1;
  while (y) {
    if (y & 1) res = res * x;
    res %= 1000000007;
    y = y >> 1;
    x = x * x;
    x %= 1000000007;
  }
  return res;
}
long long r_origin, g_origin, h;
long long dp[200005];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> r_origin >> g_origin;
  if (r_origin > g_origin) swap(r_origin, g_origin);
  long long temp = r_origin + g_origin;
  long long x = 1;
  while ((x * (x + 1)) / 2 <= temp) {
    h = x;
    x++;
  }
  dp[0] = 1;
  dp[1] = 1;
  for (int i = 2; i <= h; i++) {
    long long tot = (i * (i + 1)) / 2;
    for (int j = r_origin; j >= 0; j--) {
      long long temp = 0;
      if (j - i >= 0) {
        temp += dp[j - i];
        temp %= 1000000007;
      }
      if (tot - j - i >= 0) {
        temp += dp[j];
        temp %= 1000000007;
      }
      dp[j] = temp;
    }
  }
  long long res = 0;
  long long fin = (h * (h + 1)) / 2;
  for (int i = r_origin; i >= 0; i--) {
    if (fin - i <= g_origin) {
      res += dp[i];
      res %= 1000000007;
    }
  }
  cout << res;
}
