問題文

正整数xxに対して、関数f(x)f(x)を以下のように定義します。
  

f(1)=1f(1)=1
f(x)=f(x/2)+f(x/2)f(x) = f(\lfloor x/2 \rfloor)+f(\lceil x/2 \rceil) (2x)(2 \leq x)

ここで、x\lfloor x \rfloorxxを超えない最大の整数、x\lceil x \rceilxx以上の最小の整数を表します。
f(NK)f(N^K)の値を109+710^9+7で割った余りを出力してください。

制約

  • 1N,K10181 \leq N,K \leq 10^{18}

入力

入力はすべて整数である。
NN KK

出力

f(NK)f(N^K)の値を109+710^9+7で割った余りを出力してください。

サンプル

入力1
2 2
出力2
4

22=42^2=4
f(4)=f(2)+f(2)f(4)=f(2)+f(2)
f(2)=f(1)+f(1)f(2)=f(1)+f(1)
f(1)=1f(1)=1
以上により、f(4)=4f(4)=4 が求まります。


入力2
1000000000000000000 1000000000000000000
出力2
504853526

109+710^9+7で割った余りを出力することに注意してください。

提出


Go (1.21)