#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair<int, int>
#define F first
#define S second
const int N = 20, M = 1e9+7, inf = 1e18;
int n, m, dp[2005][15][2005];
signed main()
{
//freopen("main.inp", "r", stdin);
//freopen("main.out", "w", stdout);
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
dp[0][n][0] = 1;
for(int i = 1; i <= m; i++) {
for(int msk = 0; msk < (1 << n); msk++) dp[i][0][msk] = dp[i-1][n][msk];
for(int j = 1; j <= n; j++) {
for(int msk = 0; msk < (1 << n); msk++) {
bool use = (1 << (j-1)) & msk;
if(use) dp[i][j][msk] += dp[i][j-1][msk-(1 << (j-1))];
else {
dp[i][j][msk] += dp[i][j-1][msk+(1<<(j-1))];
if(j > 1 && !((1 << (j-2)) & msk)) dp[i][j][msk] += dp[i][j-2][msk];
}
dp[i][j][msk] %= M;
}
}
}
cout << dp[m][n][0];
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCmNvbnN0IGludCBOID0gMjAsIE0gPSAxZTkrNywgaW5mID0gMWUxODsKaW50IG4sIG0sIGRwWzIwMDVdWzE1XVsyMDA1XTsKc2lnbmVkIG1haW4oKQp7CiAgICAvL2ZyZW9wZW4oIm1haW4uaW5wIiwgInIiLCBzdGRpbik7CiAgICAvL2ZyZW9wZW4oIm1haW4ub3V0IiwgInciLCBzdGRvdXQpOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKSwgY2luLnRpZSgwKSwgY291dC50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgZHBbMF1bbl1bMF0gPSAxOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKICAgICAgICBmb3IoaW50IG1zayA9IDA7IG1zayA8ICgxIDw8IG4pOyBtc2srKykgZHBbaV1bMF1bbXNrXSA9IGRwW2ktMV1bbl1bbXNrXTsKICAgICAgICBmb3IoaW50IGogPSAxOyBqIDw9IG47IGorKykgewogICAgICAgICAgICBmb3IoaW50IG1zayA9IDA7IG1zayA8ICgxIDw8IG4pOyBtc2srKykgewogICAgICAgICAgICAgICAgYm9vbCB1c2UgPSAoMSA8PCAoai0xKSkgJiBtc2s7CiAgICAgICAgICAgICAgICBpZih1c2UpIGRwW2ldW2pdW21za10gKz0gZHBbaV1bai0xXVttc2stKDEgPDwgKGotMSkpXTsKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRwW2ldW2pdW21za10gKz0gZHBbaV1bai0xXVttc2srKDE8PChqLTEpKV07CiAgICAgICAgICAgICAgICAgICAgaWYoaiA+IDEgJiYgISgoMSA8PCAoai0yKSkgJiBtc2spKSBkcFtpXVtqXVttc2tdICs9IGRwW2ldW2otMl1bbXNrXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRwW2ldW2pdW21za10gJT0gTTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgZHBbbV1bbl1bMF07CiAgICByZXR1cm4gMDsKfQ==