#include <iostream>
#include <vector>
using namespace std;
long long MOD = 1000000007;
long long power(long long base, long long exp) {
long long res = 1;
base %= MOD;
while (exp > 0) {
if (exp % 2 == 1) res = (res * base) % MOD;
base = (base * base) % MOD;
exp /= 2;
}
return res;
}
int main() {
int w, h;
cin >> w >> h;
vector<long long> f(w + 1);
f[0] = 1;
if (w >= 1) f[1] = 1;
for (int i = 2; i <= w; i++) {
f[i] = (f[i - 1] + f[i - 2]) % MOD;
}
vector<long long> A(w + 1);
for (int i = 1; i <= w; i++) {
A[i] = power(f[i], h);
}
vector<long long> S(w + 1);
for (int i = 1; i <= w; i++) {
S[i] = A[i];
long long subtract = 0;
for (int j = 1; j < i; j++) {
subtract = (subtract + (S[j] * A[i - j])) % MOD;
}
S[i] = (S[i] - subtract + MOD) % MOD;
}
cout << S[w] << endl;
return 0;
}