#include <cstdio>
#include <cstring>
#define MAXN 3010
#define LL long long

const LL P=1000000007;

int n,m;
LL f[MAXN][MAXN],f1[MAXN][MAXN];

inline void update(LL &x,LL y){ x=(x+y)%P; }

int main(){
#ifdef DEBUG
	freopen("D.in","r",stdin);
#endif
	scanf("%d%d",&n,&m);
	n--; m--;
	f[0][0]=1;
	for(int i=1;i<=m;i++)
		for(int j=0;j<=n;j++){
			update(f[i][j],f[i-1][j]*2);
			if(j>0) update(f[i][j-1],f[i-1][j]);
			if(j<n) update(f[i][j+1],f[i-1][j]);
		}
	f1[0][0]=1;
	for(int i=1;i<=m;i++)
		for(int j=0;j<=n;j++){
			if(j>0) update(f1[i][j],f1[i-1][j]*2);
			if(j>1) update(f1[i][j-1],f1[i-1][j]);
			if(j<n) update(f1[i][j+1],f1[i-1][j]);
		}
	LL ans=0;
	for(int i=0;i<=m;i++){
		LL t1=0,t2=0;
		for(int j=0;j<=n;j++){
			update(t1,f[i][j]);
			update(t2,f1[m-i][j]);
		}
		update(ans,t1*t2);
	}
	ans=ans*4%P;
	printf("%lld\n",ans);
	return 0;
}
