#pragma GCC optimize("Ofast") #pragma GCC target("avx2") char*mmap(); #define RD(v) int v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} int wbuf[1<<26]; struct BufI4 { int a[4]; }; struct BufI6 { int a[6]; }; #define MD 1000000007 long modpow(long a, long b, long m){ long r=1; while(b){ if(b&1){ r=r*a%m; } b>>=1; a=a*a%m; } return r; } int inverse(int a){ int b=MD; int u=1; int v=0; while(b){ int q=a/b,t; t=b, b=a-q*b, a=t; t=v, v=u-q*v, u=t; } if(u<0){ u+=MD; } return u; } main(){ char*rp=mmap(0l,1l<<28,1,2,0,0ll); RD(n); RD(k); int r=modpow(2,k-1,n); int q=(modpow(2,k-1,MD)-r+MD)%MD*inverse(n)*(n&1?2:4)%MD; int d=modpow((MD+1)/2,k,MD); q=1l*q*d%MD; r*=2; int*wp=wbuf; if(n&1){ struct{ struct BufI6 b; int z; }b; if(n