#include <bits/stdc++.h>   using namespace std;   const int maxn = 2010;   const int mod = 1000000007;   long long dp[maxn][maxn];   long long s[maxn][maxn], ss[maxn][maxn];   void upd(long long &t, long long k) {     t += k;     t %= mod;   }   int main() {     int n, i, j, m;     long long t;     cin >> n >> m;     for (i = 1; i <= n; i++) {       for (j = 0; j + 1 < m; j++) {         long long t = 1 + s[i - 1][j] * (j + 1) - ss[i - 1][j];         upd(dp[i][j], t);       }       s[i][0] = dp[i][0];       for (j = 1; j + 1 < m; j++) {         s[i][j] = s[i][j - 1] + dp[i][j], ss[i][j] = ss[i][j - 1] + dp[i][j] * j;         s[i][j] %= mod;         ss[i][j] %= mod;       }     }     long long ans = 0;     for (i = 1; i <= n; i++) {       for (j = 0; j + 1 < m; j++) {         long long t1 = dp[i][j] - dp[i - 1][j];         long long t2 = dp[n - i + 1][j];         ans += t1 * t2 % mod * (m - j - 1);         ans %= mod;       }     }     cout << (ans + mod) % mod << endl;   }   