#include <bits/stdc++.h>

#define el '\n'
#define fi first
#define sec second
#define pb push_back
#define ll long long
#define sz(v) (int)(v).size()
#define all(v) (v).begin(),(v).end()
#define FOR(i, a, b) for(int i = (a), _b = b; i <= _b; i++)
#define REP(i, a, b) for(int i = (a), _b = b; i >= _b; i--)

using namespace std;

const int MAX_N = 1e7;
const int MOD = 1e9 + 7;

int fact[2 * MAX_N + 5], invfact[2 * MAX_N + 5];
int n, m;

void Input(){
    cin >> n >> m;
}

ll bin_pow(ll a, int b){
    ll res = 1;
    while(b){
        if(b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b /= 2;
    }
    return res;
}

ll C(int k, int n){
    return 1LL * fact[n] * invfact[k] % MOD * invfact[n - k] % MOD;
}

void Solve(){

    fact[0] = 1;
    FOR(i, 1, n + m) fact[i] = (1LL * fact[i - 1] * i) % MOD;


    invfact[n + m] = bin_pow(fact[n + m], MOD - 2);
    REP(i, n + m - 1, 0) invfact[i] = (1LL * invfact[i + 1] * (i + 1)) % MOD;

    ll ans = 0;
    FOR(k, 0, min(n, m)){
        ans = (ans + (1LL * C(n - k, n + m - k) * C(m - k, m)) % MOD) % MOD;
    }

    cout << ans;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    Input();
    Solve();
}
