code:
#include <bits/stdc++.h> #define N 1000007 #define ll long long #define mod 100000007 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int qpow(int x,int y) { int tmp=1; for(;y;y>>=1,x=(ll)x*x%mod) if(y&1) tmp=(ll)tmp*x%mod; return tmp; } int A[N],f[N]; int main() { // setIO("input"); int i,j,n,m,inv; scanf("%d%d",&n,&m); inv=A[0]=1; for(i=2;i<=m;++i) inv=(ll)i*inv%mod; inv=qpow(inv,mod-2); int mx=(qpow(2,n)-1+mod)%mod; for(i=1;i<=m;++i) A[i]=(ll)A[i-1]*(mx-i+1+mod)%mod; f[0]=1,f[1]=0; for(i=2;i<=m;++i) { f[i]=(ll)(A[i-1]-f[i-1]+mod)%mod; f[i]=(ll)(f[i]-(ll)f[i-2]*(i-1)%mod*(qpow(2,n)-1-(i-2)+mod)%mod+mod)%mod; } printf("%d\n",(ll)f[m]*inv%mod); return 0; }