#include<iostream>
using namespace std;
const int mod =1000000007;
int fact[20001];
void factorial()
{ fact[0]=1;
for(int i=1;i<2001;i++)
{
fact[i] = (fact[i-1]*i)%mod;
}
}
// (n!%m)*((r!)^m-2)%m)*(((n-r)!)^m-2)%m)%m
int POWER(int x,int y)
{
if(y==0)return 1;
if(y%2==0)
{
x = POWER((x*x)%mod,y/2);
}
else{
x = x*POWER(x,y-1)%mod;
}
return x;
}
int ncr(int n,int r)
{
int ans = fact[n]%mod;
ans = ((ans*(POWER(fact[r],mod-2)%mod)%mod)*(POWER(fact[n-r],mod-2)%mod))%mod;
return ans;
}
int main()
{int a,b;
cin>>a>>b;
int ans;
int s=ncr((a+b-1),(b-1));
ans=POWER(s,a);
cout<<ans;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBtb2QgPTEwMDAwMDAwMDc7CmludCBmYWN0WzIwMDAxXTsKdm9pZCBmYWN0b3JpYWwoKQp7ICAgZmFjdFswXT0xOwogICAgZm9yKGludCBpPTE7aTwyMDAxO2krKykKICAgIHsKICAgICAgICBmYWN0W2ldID0gKGZhY3RbaS0xXSppKSVtb2Q7CiAgICB9Cn0KLy8gKG4hJW0pKigociEpXm0tMiklbSkqKCgobi1yKSEpXm0tMiklbSklbQppbnQgUE9XRVIoaW50IHgsaW50IHkpCnsKICAgIGlmKHk9PTApcmV0dXJuIDE7CiAgICBpZih5JTI9PTApCiAgICB7CiAgICAgICAgeCA9IFBPV0VSKCh4KngpJW1vZCx5LzIpOwogCiAgICB9CiAgICBlbHNlewogICAgICAgIHggPSB4KlBPV0VSKHgseS0xKSVtb2Q7CiAgICB9CiAgICByZXR1cm4geDsKfQppbnQgbmNyKGludCBuLGludCByKQp7CiAgICBpbnQgYW5zID0gZmFjdFtuXSVtb2Q7CiAgICBhbnMgPSAoKGFucyooUE9XRVIoZmFjdFtyXSxtb2QtMiklbW9kKSVtb2QpKihQT1dFUihmYWN0W24tcl0sbW9kLTIpJW1vZCkpJW1vZDsKICAgIHJldHVybiBhbnM7Cn0KaW50IG1haW4oKQp7aW50IGEsYjsKY2luPj5hPj5iOwppbnQgYW5zOwppbnQgcz1uY3IoKGErYi0xKSwoYi0xKSk7CmFucz1QT1dFUihzLGEpOwpjb3V0PDxhbnM7Cn0=