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]. 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class codeforces1288C 
{ 
    static class FastReader 
	{ 
		BufferedReader br; 
		StringTokenizer st; 
		public FastReader() 
		{ 
			br = new BufferedReader(new InputStreamReader(System.in)); 
		} 

		String next() 
		{ 
			while (st == null || !st.hasMoreElements()) 
			{ 
				try
				{ 
					st = new StringTokenizer(br.readLine()); 
				} 
				catch (IOException e) 
				{ 
					e.printStackTrace(); 
				} 
			} 
			return st.nextToken(); 
		} 

		int nextInt() 
		{
			return Integer.parseInt(next());
		}
		long nextLong() 
		{
			return Long.parseLong(next()); 
		}
		double nextDouble() 
		{
			return Double.parseDouble(next()); 
		}
		String nextLine() 
		{ 
			String str = ""; 
			try
			{ 
				str = br.readLine(); 
			} 
			catch (IOException e) 
			{ 
				e.printStackTrace(); 
			} 
			return str; 
		} 
	} 
	static int nCrModp(int n, int r, int p) 
    { 
        if (r>n-r) 
        r=n-r; 
        int C[] = new int[r + 1]; 
        C[0] = 1;
        for (int i = 1; i <= n; i++) 
        { 
            for (int j = Math.min(i,r);j>0;j--) 
            C[j] = (C[j] + C[j-1])% p; 
        } 
        return C[r]; 
    }
	public static void main(String[] args) 
	{ 
        FastReader s=new FastReader();
        StringBuilder sb = new StringBuilder();
		int n = s.nextInt(), m = s.nextInt(), p = (int)Math.pow(10,9)+7; 
        int x =nCrModp(n-1+2*m, 2*m, p);
        sb.append(x);
        System.out.println(x); 
    } 
}