#include <bits/stdc++.h>
using namespace std;
const int MAX = 200010;
const int MOD = 1e9 + 7;
int R, G, max_n;
long long dp[2][MAX];
int max_height() {
  for (int r = 0; r <= R; r++) {
    dp[1000 % 2][r] = 0;
  }
  for (int n = 1000 - 1; n >= 1; n--) {
    for (int r = 0; r <= R; r++) {
      int g = G - (n * (n - 1) / 2 - (R - r));
      if (g < 0) break;
      long long res = 0;
      if (r >= n) res = max(res, 1 + dp[(n + 1) % 2][r - n]);
      if (g >= n) res = max(res, 1 + dp[(n + 1) % 2][r]);
      dp[n % 2][r] = res;
    }
  }
  return dp[1][R];
}
long long add_mod(long long &a, long long &b) {
  long long res = a + b;
  while (res > MOD) res -= MOD;
  return res;
}
int N;
int num_ways() {
  for (int r = 0; r <= R; r++) {
    int g = G - ((N + 1) * N / 2 - (R - r));
    dp[(N + 1) % 2][r] = g >= 0;
  }
  for (int n = N; n >= 1; n--) {
    for (int r = 0; r <= R; r++) {
      int g = G - (n * (n - 1) / 2 - (R - r));
      if (g < 0) break;
      long long res = 0;
      if (r >= n) res = add_mod(res, dp[(n + 1) % 2][r - n]);
      if (g >= n) res = add_mod(res, dp[(n + 1) % 2][r]);
      dp[n % 2][r] = res;
    }
  }
  return dp[1][R];
}
int main() {
  int n = 1;
  while (n * (n + 1) / 2 <= 2 * MAX) n++;
  max_n = n;
  while (scanf("%d%d", &R, &G) > 0) {
    if (R > G) swap(R, G);
    N = max_height();
    printf("%d\n", num_ways());
  }
}
