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;
// }
}