#include <stdio.h>
int g(int n,int m)
{
    int dp[n+1][m+1];
    //动态规划:将子解存储起来,避免重复计算
    for(int i=0;i<=n;i++)
    {
        for(int j=0;j<=m;j++)
        {
            if(i==1&&j==1)
                dp[i][j]=1;
            else if(i>=2&&j==1)
                dp[i][j]=dp[i-1][j];
            else if(i==1&&j>=2)
                dp[i][j]=dp[i][j-1];
            else{
                dp[i][j]=(dp[i-1][j]+dp[i][j-1])%1000000007;
            }

        }
    }
    return dp[n][m];
}
int main() {
    int m,n;
    scanf("%d%d",&n,&m);
    int k=g(n,m);
    printf("%d",k);
    return 0;
}