#include <cstdio>
const int N=2005,mo=1000000007;
int f[N][N],fac[N],inv[N];
int ksm(int x,int y){
	int i=1;
	for (;y;y>>=1,x=1ll*x*x%mo)
		if (y&1) i=1ll*i*x%mo;
	return i;
}
long long C(int n,int m){
	return 1ll*fac[n]*inv[m]%mo*inv[n-m]%mo;
}
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	f[0][0]=1;
	for (int i=0;i<=k;i++)
		for (int j=0;i+j<=k;j++){
			if (j) f[i][j]=f[i][j-1];
			if (i) (f[i][j]+=f[i-1][j+1])%=mo;
		}
	int ans=0;
	if (k==n) ans=f[n-1][0];
	else{
		fac[0]=1;
		for (int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mo;
		inv[n]=ksm(fac[n],mo-2);
		for (int i=n;i;i--) inv[i-1]=1ll*inv[i]*i%mo;
		for (int m=n-k+1;m<=n;m++)
			ans=(ans+C(m-2,n-k-1)*f[n-m][k-1-n+m])%mo;
	}
	for (int i=1;i<n-k;i++) (ans<<=1)%=mo;
	printf("%d\n",ans);
}