#include <bits/stdc++.h>
using namespace std;
const int MaxN = 2100;
inline long long add(long long a, long long b) {
  long long c = a + b;
  if (c >= (1000000007)) {
    c -= (1000000007);
  }
  return c;
}
inline long long mul(long long a, long long b) {
  return (a * b) % (1000000007);
}
int n, m;
long long D[MaxN][MaxN], D2[MaxN][MaxN];
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 2; i <= m; i++) {
    D[0][i] = 1;
    D2[0][i] = 1;
  }
  for (int i = 1; i < n; i++) {
    long long sum = 0;
    for (int j = 2; j <= m; j++) {
      sum = add(sum, D[i - 1][j]), D[i][j] = add(D[i][j - 1], sum);
    }
    for (int j = 2; j <= m; j++) {
      D[i][j] = add(D[i][j], 1),
      D2[i][j] = add(D[i][j], (1000000007) - D[i - 1][j]);
    }
  }
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 2; j <= m; j++) {
      ans = add(ans, mul(m - j + 1, mul(D[i][j], D2[n - i - 1][j])));
    }
  }
  printf("%I64d\n", ans);
  return 0;
}
