import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        long mod=1000000007L;
        //动态规划(递归会超时)
        long[][] dp=new long[1000][1000];

        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            int m = in.nextInt();

            for(int i=1;i<=n;i++){
                dp[i][1]=1;
            }
            for(int j=1;j<=m;j++){
                dp[1][j]=1;
            }

            for(int i=2;i<=n;i++){
                for(int j=2;j<=m;j++){
                    dp[i][j]=(dp[i-1][j]+dp[i][j-1])%mod;
                }
            }

            System.out.println(dp[n][m]);
            // int answer=fib(n,m)%1000000007;
            // System.out.println(answer);
        }
    }
    // public static int fib(int i,int j){
    //     if(i==1&&j==1){
    //         return 1;
    //     }
    //     if(i>=2&&j==1){
    //         return fib(i-1,j); 
    //     }
    //     if(j>=2&&i==1){
    //         return fib(i,j-1);
    //     }
    //     if(i>=2&&j>=2){
    //         return fib(i-1,j)+fib(i,j-1);
    //     }
    //     return -1;
    // }

}