1 #include<iostream>
2 #include<cstdio>
3 #define ll long long
4 using namespace std; 5 const int mod=1e9+7; 6 int n,k; 7 ll js[1000010],jsinv[1000010]; 8 ll qpow(ll base,int y,int mo) 9 { 10 ll ans=1; 11 while(y) 12 { 13 if(y&1) ans=ans*base%mo; 14 base=base*base%mo; 15 y>>=1; 16 } 17 return ans; 18 } 19 void init() 20 { 21 js[0]=1; 22 for(int i=1;i<=n;i++) js[i]=js[i-1]*i%mod; 23 jsinv[n]=qpow(js[n],mod-2,mod); 24 for(int i=n-1;i>=0;i--) jsinv[i]=jsinv[i+1]*(i+1)%mod; 25 } 26 inline ll C(int n,int m) 27 { 28 return js[n]*jsinv[m]%mod*jsinv[n-m]%mod; 29 } 30 inline ll ask(int m) 31 { 32 ll ans=0; 33 for(int i=0,u=1;i<=m;i++,u=-u) 34 ans=(ans+u*C(m,i)*(qpow(2,qpow(2,m-i,mod-1),mod)-1)%mod)%mod; 35 return ans; 36 } 37 int main() 38 { 39 scanf("%d%d",&n,&k); 40 init(); 41 printf("%lld\n",(ask(n-k)*C(n,k)%mod+mod)%mod); 42 return 0; 43 }