#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:128777216")
using namespace std;
const long long LINF = 1000000000000000000LL;
const int INF = 1000000000;
const long double eps = 1e-9;
const long double PI = 3.1415926535897932384626433832795l;
void prepare(string s) {
  if (s.length() != 0) {
    freopen((s + ".in").c_str(), "r", stdin);
    freopen((s + ".out").c_str(), "w", stdout);
  }
}
const int MOD = INF + 7;
int r, g;
int d[2][200100];
void read() { scanf("%d %d", &r, &g); }
int get(int n) { return ((1 + n) * n) / 2; }
void upd(int i, int j, int val) {
  d[i][j] += val;
  if (d[i][j] >= MOD) d[i][j] -= MOD;
}
void solve() {
  int cur = 0;
  d[cur][0] = 1;
  bool ok;
  for (int n = 1;; n++) {
    for (int i = 0; i <= r; i++) {
      if (get(n - 1) - i + n <= g) {
        upd(cur ^ 1, i, d[cur][i]);
        ok = true;
      }
      if (i + n <= r && get(n - 1) - (i + n) <= g) {
        upd(cur ^ 1, i + n, d[cur][i]);
        ok = true;
      }
    }
    bool ok = false;
    for (int i = 0; i <= r; i++)
      if (d[cur ^ 1][i] > 0) ok = true;
    if (!ok) break;
    for (int i = 0; i <= r; i++) d[cur][i] = 0;
    cur ^= 1;
  }
  int ans = 0;
  for (int i = 0; i <= r; i++) {
    ans += d[cur][i];
    if (ans >= MOD) ans -= MOD;
  }
  printf("%d\n", ans);
}
int main() {
  prepare("");
  read();
  solve();
  return 0;
}
