#include<bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long binExp(long long a, long long b){
long long ans = 1;
while(b > 0){
if(b % 2 == 1){
ans = (ans * a) % MOD;
b--;
}
b /= 2;
a = (a * a) % MOD;
}
return ans;
}
int main(){
long long w, h;
cin >> w >> h;
vector<long long> fib(1 + w);
fib[0] = 1;
fib[1] = 1;
for(long long i = 2; i <= w; i++){
fib[i] = (fib[i - 1] + fib[i - 2]) % MOD;
}
vector<long long> dp(1 + w, 0);
vector<long long> cntNot(1 + w, 0);
dp[0] = 1;
for(long long i = 1; i <= w; i++){
for(long long j = 1; j < i; j++){
cntNot[i] = (cntNot[i] + dp[j] * cntNot[i - j]) % MOD;
}
dp[i] = binExp(fib[i], h);
dp[i] = (dp[i] - cntNot[i]) % MOD;
if(dp[i] < 0) dp[i] += MOD;
cntNot[i] = (cntNot[i] + dp[i]) % MOD;
}
cout << dp[w] << "\n";
}