/*dp棋盘*/
import java.util.*;
public class Main{
    public static void main(String[] arg){
        Scanner s=new Scanner(System.in);
        while(s.hasNextLine()){
            String input=s.nextLine();
            String[] arr=input.split(" ");
            System.out.println(getDp(Integer.valueOf(arr[0]),Integer.valueOf(arr[1])));
        }
    }

    private static int getDp(int n,int m){
        int[][] dp=new int[n+1][m+1];
        for(int count =0;count<n+1;count++){
             dp[count][0]=1;
        }
        for(int count =0;count<m+1;count++){
             dp[0][count]=1;
        }
        for(int i=1;i<n+1;i++){
            for(int j=1;j<m+1;j++){
              dp[i][j]=dp[i][j-1]+dp[i-1][j];
            }
        }
        return dp[n][m];
    }
}
/*recursive 棋盘*/
import java.util.*;
public class Main{
    public static void main(String[] arg){
        Scanner s=new Scanner(System.in);
        while(s.hasNextLine()){
            String input=s.nextLine();
            String[] arr=input.split(" ");
            System.out.println(getRecursive(0,0,Integer.valueOf(arr[0]),Integer.valueOf(arr[1])));
        }
    }

    private static int getRecursive(int x,int y,int n,int m){
        if(x==n){
            return 1;
        }
        if(y==m){
            return 1;
        }
        return getRecursive(x+1,y,n,m)+getRecursive(x,y+1,n,m);
    }
}