#include<bits/stdc++.h>
using namespace std;
int x,y;
typedef long long ll;
const ll Mod=1e9+7;
ll dp[2][(1<<6)+5][(1<<6)+5];
int main(){
scanf("%d%d",&x,&y);
dp[0][0][0]=1;
int i,j,k,l,ok,p,ok2,m;
ll ans=0;
for(i=1;i<=x;i++){
memset(dp[i&1],0,sizeof(dp[i&1]));
for(j=0;j<(1<<y);j++)
for(k=0;k<(1<<y);k++){
ok=0;
for(l=0;l<y;l++){
if((j&(1<<l))&&(!(j&(1<<l-1)))&&l>1) ok|=(1<<l-2);
if((j&(1<<l))&&(!(j&(1<<l+1)))) ok|=(1<<l+2);
}
if(k&ok) continue;
ok=0;
for(l=0;l<y;l++){
if((k&(1<<l))&&(!(k&(1<<l-1)))&&l>1) ok|=(1<<l-2);
if((k&(1<<l))&&(!(k&(1<<l+1)))) ok|=(1<<l+2);
}
if(j&ok) continue;
ok=0;
for(l=0;l<y;l++){
if((j&(1<<l))&&(!(k&(1<<l)))) ok|=(1<<l+1);
if((j&(1<<l))&&(!(k&(1<<l)))&&l>0) ok|=(1<<l-1);
if((k&(1<<l))&&(!(k&(1<<l-1)))&&l>1) ok|=(1<<l-2);
if((k&(1<<l))&&(!(k&(1<<l+1)))) ok|=(1<<l+2);
}
for(l=0;l<(1<<y);l++){
if(!(l&ok)){
ok2=1;
for(m=0;m<y;m++){
if((l&(1<<m))&&(!(l&(l<<m+1)))&&(k&(1<<m+2))) ok2=0;
if((l&(1<<m))&&(!(l&(l<<m-1)))&&(k&(1<<m-2))) ok2=0;
if((l&(1<<m))&&(!(k&(1<<m)))&&(j&(1<<m-1))) ok2=0;
if((l&(1<<m))&&(!(k&(1<<m)))&&(j&(1<<m+1))) ok2=0;
}
if(!ok2) continue;
dp[i&1][k][l]=(dp[i&1][k][l]+dp[(i-1)&1][j][k])%Mod;
}
}
}
}
for(i=0;i<(1<<y);i++){
for(j=0;j<(1<<y);j++){
ok=0;
for(l=0;l<y;l++){
if((i&(1<<l))&&(!(i&(1<<l-1)))&&l>1) ok|=(1<<l-2);
if((i&(1<<l))&&(!(i&(1<<l+1)))) ok|=(1<<l+2);
}
if(ok&j) continue;
ok=0;
for(l=0;l<y;l++){
if((j&(1<<l))&&(!(j&(1<<l-1)))&&l>1) ok|=(1<<l-2);
if((j&(1<<l))&&(!(j&(1<<l+1)))) ok|=(1<<l+2);
}
if(ok&i) continue;
ans=(ans+dp[x&1][i][j])%Mod;
}
}
printf("%lld",ans);
}