#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
long long dp[5][1<<6+1][1<<6+1];
int n,m;
bool ck[1<<6+1][1<<6+1];
inline bool check_one(int a,int b){
for(int i=0;i<m;i++){
if(a&(1<<i)){
int l=i+1,r=i-1;
if(l<m-1&&!(a&(1<<l))){
if(b&(1<<(l+1))){
return 1;
}
}
if(r>=1&&!(a&(1<<r))){
if(b&(1<<(r-1))){
return 1;
}
}
}
}
for(int i=0;i<m;i++){
if(b&(1<<i)){
int l=i+1,r=i-1;
if(l<m-1&&!(b&(1<<l))){
if(a&(1<<(l+1))){
return 1;
}
}
if(r>=1&&!(b&(1<<r))){
if(a&(1<<(r-1))){
return 1;
}
}
}
}
return 0;
}
inline check_two(int a,int b,int c){
if( ck[a][b] || ck[b][c] )return 1;
for(int i=0;i<m;i++){
if(b&(1<<i)||!(a&(1<<i)))continue;
int l=i+1,r=i-1;
if(l<m&&(c&(1<<l))){
return 1;
}
if(r>=0&&(c&(1<<r))){
return 1;
}
}
for(int i=0;i<m;i++){
if(b&(1<<i)||!(c&(1<<i)))continue;
int l=i+1,r=i-1;
if(l<m&&(a&(1<<l))){
return 1;
}
if(r>=0&&(a&(1<<r))){
return 1;
}
}
return 0;
}
int main(){
cin>>n>>m;
for(int i=0;i<(1<<m);i++){
dp[1][i][0]=1;
}
for(int i=0;i<(1<<m);i++){
for(int j=0;j<(1<<m);j++){
if(check_one(i,j)){
ck[i][j]=ck[j][i]=1;
continue;
}
dp[2][i][j]+=dp[1][j][0];
}
}
for(int line=3;line<=n;line++){
for(int i=0;i<(1<<m);i++){
for(int j=0;j<(1<<m);j++){
for(int k=0;k<(1<<m);k++){
if(check_two(i,j,k)){
dp[line%3][k][j]+=dp[(line-1)%3][j][i];
dp[line%3][k][j]%=mod;
}
}
}
}
}
long long ans=0;
for(int i=0;i<(1<<m);i++){
for(int j=0;j<(1<<m);j++){
if(ck[i][j])continue;
ans+=dp[n%3][i][j];
ans%=mod;
}
}
cout<<ans;
return 0;
}