#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD7 = (int)1e9 + 7;
template <class T1, class T2>
int upmin(T1 &x, T2 v) {
  if (x > v) {
    x = v;
    return 1;
  }
  return 0;
}
template <class T1, class T2>
int upmax(T1 &x, T2 v) {
  if (x < v) {
    x = v;
    return 1;
  }
  return 0;
}
int R, G;
void init() { cin >> R >> G; }
vector<vector<int> > dp;
int ans;
void preprocess() {
  int maxh = sqrt(R + G << 1);
  dp = vector<vector<int> >(2, vector<int>(R + 1));
  dp[0][R] = 1;
  for (int i = 0; i < maxh; ++i) {
    int pass = 0;
    for (int r = 0; r <= R; ++r)
      if (dp[0][r]) {
        int used = i * (i + 1) / 2;
        int g = R + G - r - used;
        if (g >= i + 1) pass = 1, (dp[1][r] += dp[0][r]) %= MOD7;
        if (r >= i + 1) pass = 1, (dp[1][r - (i + 1)] += dp[0][r]) %= MOD7;
      }
    if (not pass) break;
    swap(dp[0], dp[1]);
    fill(dp[1].begin(), dp[1].end(), 0);
  }
}
void solve() {
  int ans = 0;
  for (int i = 0; i <= R; ++i) (ans += dp[0][i]) %= MOD7;
  cout << ans << endl;
}
signed main() {
  ios::sync_with_stdio(0);
  init();
  preprocess();
  solve();
  return 0;
}
