import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main (String args[]) throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String input;
StringBuilder sb=new StringBuilder(1000);
while((input=br.readLine())!=null)
{
String numbers[]=input.trim().split(" +");
long matrixA[][]={{1,1},{1,0}};
long ans=matrixpowerMod(matrixA,Integer.parseInt(numbers[0]),(int) Math.pow(2,Integer.parseInt(numbers[1])))[0][1];
sb.append(ans+"\n");
}
System.out.print(sb);
}
public static long[][] matrixmultiplication(long[][] A,long[][] B,int mod)
{
long resultantmatrix[][]=new long[2][2];
resultantmatrix[0][0] = (A[0][0]*B[0][0] + A[0][1]*B[1][0]) % mod;
resultantmatrix[0][1] = (A[0][0]*B[0][1] + A[0][1]*B[1][1]) % mod;
resultantmatrix[1][0] = (A[1][0]*B[0][0] + A[1][1]*B[1][0] )% mod;
resultantmatrix[1][1] = (A[1][0]*B[0][1] + A[1][1]*B[1][1] )% mod;
return resultantmatrix;
}
public static long[][] matrixpowerMod(long[][] A,long power,int mod)
{
if(power==0)
{
long matrixA[][]={{1,0},{0,1}};
return matrixA;
}
else if(power % 2==0)
{
long C[][]=matrixpowerMod(A, power/2,mod);
return matrixmultiplication(C,C,mod);
}
else
{
return matrixmultiplication(A,matrixpowerMod(A, power-1,mod),mod);
}
}
}
0 comments: