/****************************************************
file name: cf478D.cpp
author: Kalis
creat time: Tue 21 Oct 2014 04:20:40 PM CST
***************************************************/
/**********************************************************************************************************
定义dp(i,j)为前i层总共用了j个红色方块的方法数,则dp(i,j)可以由两个状态得到:当前层为红,当前层不为红
状态转移方程为:dp(i,j) = dp(i - 1,j) + dp(i - 1,j - i);
***********************************************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
using namespace std;
const int MAXN = 2 * 1e5 + 10;
const int mod = 1e9 + 7;
long long dp[MAXN];
int r,g;
int main()
{
scanf("%d%d",&r, &g);
int temp = 0;
int k = 0;
while(temp <= r + g)
{
k ++;
temp += k;
}
int h = k - 1;
long long re = ((1 + h) * h >> 1) - g;
memset(dp,0,sizeof(dp));
dp[0] = 1;
long long ans = 0;
for(int i = 1; i <= h; i ++)
{
int j;
for(j = r; j >= 0; j --)
{
if(j >= i)
dp[j] = (dp[j] + dp[j - i]) % mod;
if( i == h && j >= re)
ans = (dp[j] + ans) % mod;
}
}
printf("%I64d\n",ans);
return 0;
}