N,K = map(int,input().split()); MOD = pow(10,9)+7 MAX = pow(2,K)-1 if N%2 == 1: youso = (pow(2,K,2*N*MOD)-1)//(2*N) ans = [youso]*N #ans = [(MAX//(2*N))%MOD]*N amari = (pow(2,K,2*N*MOD)-1)%(2*N) #amari = MAX%(2*N) for i in range(N): #ans[i] += MAX//(2*N) if i%2 == 1 and amari >= i: ans[i] += 1 if i%2 == 0 and amari >= i + N: ans[i] += 1 else: youso = (pow(2,K,N*MOD)-1)//N ans = [youso]*N #ans = [(MAX//N)%MOD]*N amari = (pow(2,K,N*MOD)-1)%N #amari = MAX%N for i in range(N): if i%2 == 1: if amari >= i: ans[i] += 1 else: ans[i] = 0 #print(ans) for i in range(N): P = ans[i] + ans[(N-i)%N] #print(i,P) ret = P*pow(pow(2,K,MOD),MOD-2,MOD) print(ret%MOD)