#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <functional>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
typedef long long int lli;
#define rep(i, a, n) for (lli i = a; i < n; i++)
#define rrep(i, n, a) for (lli i = n; i >= a; i--)
#define vlli vector<lli>
#define mii map<lli, lli>
#define umii unordered_map<lli, lli>
#define plii pair<lli, lli>
lli mod = 1e9 + 7;
void fastio()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
lli power(lli a, lli b)
{
lli res = 1;
while (b)
{
if (b % 2 == 0)
{
a = (a % mod * a % mod) % mod;
b = b / 2;
}
else
{
res = (res % mod * a % mod) % mod;
b--;
}
}
return res % mod;
}
lli mod_inv(lli a)
{
return power(a,mod-2);
}
int main()
{
fastio();
int n,m;
cin>>n>>m;
lli a=1,b=1,c=1;
rep(i,1,n+2*m)
{
a=(a*i)%mod;
if(i<n){
c=(c*i)%mod;
}
if(i<=2*m){
b=(b*i)%mod;
}
}
// cout<<a<<" "<<b<<" "<<c<<"\n";
lli ans=a;
ans=(ans*mod_inv(b))%mod;
ans=(ans*mod_inv(c))%mod;
cout<<ans;
return 0;
}
1622A - Construct a Rectangle | 1620A - Equal or Not Equal |
1517A - Sum of 2050 | 620A - Professor GukiZ's Robot |
1342A - Road To Zero | 1520A - Do Not Be Distracted |
352A - Jeff and Digits | 1327A - Sum of Odd Integers |
1276A - As Simple as One and Two | 812C - Sagheer and Nubian Market |
272A - Dima and Friends | 1352C - K-th Not Divisible by n |
545C - Woodcutters | 1528B - Kavi on Pairing Duty |
339B - Xenia and Ringroad | 189A - Cut Ribbon |
1182A - Filling Shapes | 82A - Double Cola |
45A - Codecraft III | 1242A - Tile Painting |
1663E - Are You Safe | 1663D - Is it rated - 3 |
1311A - Add Odd or Subtract Even | 977F - Consecutive Subsequence |
939A - Love Triangle | 755A - PolandBall and Hypothesis |
760B - Frodo and pillows | 1006A - Adjacent Replacements |
1195C - Basketball Exercise | 1206A - Choose Two Numbers |