#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9+7;
ll h, w;
ll dp[3005][3005];
ll calc(int h, int w) {
if((h < 0 || w < 0)) return 0;
if(h == 0 || w == 0) return 1;
if(~dp[h][w]) return dp[h][w];
dp[h][w] = calc(h-1, w);
dp[h][w] = (dp[h][w] + calc(h-1, w-1)*w*4) % mod;
dp[h][w] = (dp[h][w] + calc(h-2, w-1)*w*(h-1)) % mod;
dp[h][w] = (dp[h][w] + calc(h-1, w-2)*(w*(w-1)/2%mod)) % mod;
return dp[h][w];
}
int main() {
memset(dp, -1, sizeof dp);
cin >> h >> w;
cout << (calc(h, w)+mod-1)%mod;
}