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]. 
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000 + 1;
const int maxm = 10 + 1;
const long long mod = 1000000000 + 7;
long long memo[maxm][maxn][maxn];
int N, M;
long long dp(int pos, int antA, int antB) {
  if (pos >= M) return 1;
  long long &res = memo[pos][antA][antB];
  if (res != -1) return res;
  res = 0;
  for (int i = antA; i < N + 1; i++) {
    for (int j = antB; j >= i; j--) {
      if (i <= j && j <= N && i >= 1) {
        res += dp(pos + 1, i, j);
        res %= mod;
      }
    }
  }
  return res;
}
long long gcdE(long long a, long long b, long long *x, long long *y) {
  if (a == 0) {
    *x = 0, *y = 1;
    return b;
  }
  long long x1, y1;
  long long gcd = gcdE(b % a, a, &x1, &y1);
  *x = y1 - (b / a) * x1;
  *y = x1;
  return gcd;
}
long long modInverse(long long b, long long m) {
  long long x, y;
  long long g = gcdE(b, m, &x, &y);
  if (g != 1) return -1;
  return (x % mod + mod) % mod;
}
long long modDivide(long long a, long long b) {
  a = a % mod;
  long long inv = modInverse(b, mod);
  if (inv == -1) return -1;
  return (inv * a) % mod;
}
long long binomialCoeff(int n, int k) {
  long long res = 1;
  if (k > n - k) k = n - k;
  for (int i = 0; i < k; i++) {
    res = (res % mod * (n - i) % mod) % mod;
    res = modDivide(res, i + 1);
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  for (int i = 0; i < maxm; i++)
    for (int j = 0; j < maxn; j++)
      for (int k = 0; k < maxn; k++) memo[i][j][k] = -1;
  cin >> N >> M;
  N--;
  M *= 2ll;
  long long res = binomialCoeff(N + M, M);
  if (res < 0) res += mod;
  cout << res << '\n';
  return 0;
}
