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.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        Scanner in = new Scanner(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        TaskC solver = new TaskC();
        solver.solve(1, in, out);
        out.close();
    }

    static class TaskC {
        public static long[][][] dp;
        public static int n;
        public static int m;
        public static long mod;

        public void solve(int testNumber, Scanner in, PrintWriter out) {
            n = in.nextInt();
            m = in.nextInt();
            dp = new long[m + 1][n + 1][n + 1];
            mod = 1000000007L;
            for (int i = 0; i <= m; i++)
                for (int j = 0; j <= n; j++)
                    for (int k = 0; k <= n; k++)
                        dp[i][j][k] = -1;
            long ans = get(0, 1, n);
            out.println(ans);
        }

        public long get(int len, int val1, int val2) {
            if (len == m)
                return 1L;
            if (val1 > n || val2 < 0)
                return 0;
            if (val1 > val2)
                return 0;
            if (dp[len][val1][val2] != -1)
                return dp[len][val1][val2];
            long ans = 0;
            long ans1 = get(len, val1, val2 - 1);
            long ans2 = get(len, val1 + 1, val2);
            long ans3 = get(len, val1 + 1, val2 - 1);
            long ans4 = get(len + 1, val1, val2);
            ans = (ans1 % mod + ans2 % mod - ans3 % mod + ans4 % mod + mod) % mod;
            dp[len][val1][val2] = ans;
            return ans;
        }

    }
}

