You are given two integers n and m. Calculate the number of pairs of arrays (a, b) such that:

  * the length of both arrays is equal to m; 
  * each element of each array is an integer between 1 and n (inclusive); 
  * a_i ≤ b_i for any index i from 1 to m; 
  * array a is sorted in non-descending order; 
  * array b is sorted in non-ascending order. 



As the result can be very large, you should print it modulo 10^9+7.

Input

The only line contains two integers n and m (1 ≤ n ≤ 1000, 1 ≤ m ≤ 10).

Output

Print one integer – the number of arrays a and b satisfying the conditions described above modulo 10^9+7.

Examples

Input


2 2


Output


5


Input


10 1


Output


55


Input


723 9


Output


157557417

Note

In the first test there are 5 suitable arrays: 

  * a = [1, 1], b = [2, 2]; 
  * a = [1, 2], b = [2, 2]; 
  * a = [2, 2], b = [2, 2]; 
  * a = [1, 1], b = [2, 1]; 
  * a = [1, 1], b = [1, 1]. 
/*
If you want to aim high, aim high
Don't let that studying and grades consume you
Just live life young
******************************
If I'm the sun, you're the moon
Because when I go up, you go down
*******************************
*/
import java.util.*;
import java.io.*;

   public class C
   {
      static long MOD = 1000000007L;
      public static void main(String omkar[]) throws Exception
      {
         //BufferedReader infile = new BufferedReader(new FileReader("cowdate.in"));
         BufferedReader infile = new BufferedReader(new InputStreamReader(System.in));  
         StringTokenizer st = new StringTokenizer(infile.readLine());
         int N = Integer.parseInt(st.nextToken());
         int M = Integer.parseInt(st.nextToken());
         long[][] dpUp = new long[M][N+1];
         Arrays.fill(dpUp[0], 1L);
         for(int i=1; i < M; i++)
         {
            long sum = 0L;
            for(int j=1; j <= N; j++)
            {
               sum += dpUp[i-1][j];
               sum %= MOD;
               dpUp[i][j] += sum;
               dpUp[i][j] %= MOD;
            }
         }
         long[][] dpDown = new long[M][N+1];
         Arrays.fill(dpDown[0], 1L);
         for(int i=1; i < M; i++)
         {
            long sum = 0L;
            for(int j=N; j >= 1; j--)
            {
               sum += dpDown[i-1][j];
               sum %= MOD;
               dpDown[i][j] += sum;
               dpDown[i][j] %= MOD;
            }
         }
         //meet
         long res = 0L;
         for(int a=1; a <= N; a++)
            for(int b=a; b <= N; b++)
            {
               res += dpUp[M-1][a]*dpDown[M-1][b];
               res %= MOD;
            }
         System.out.println(res);
      }
   }