#include <bits/stdc++.h>
using namespace std;
const long long maxN = 2e5 + 13, mod = 1e9 + 7;
long long r, g, odp[maxN], ans;
bool can(long long x) {
  if (x * (x + 1) / 2 <= r + g) return 1;
  return 0;
}
int32_t main() {
  cin >> r >> g;
  long long lf = 0, rg = max(r, g) + 1;
  while (rg - lf > 1) {
    long long mid = lf + rg >> 1;
    if (can(mid))
      lf = mid;
    else
      rg = mid;
  }
  long long h = lf;
  odp[0] = 1;
  for (long long j = 0; j <= h; j++) {
    for (long long i = r; i >= 0; i--) {
      if (!(i == 0 && j == 0))
        odp[i] = (odp[i] + ((i >= j) ? odp[i - j] : 0)) % mod;
    }
  }
  for (long long i = r; i + g >= h * (h + 1) / 2 && i >= 0; i--) {
    ans = (ans + odp[i]) % mod;
  }
  cout << ans << endl;
}
