#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,Mod;
const int maxn=5;
const int maxm=5;
struct Matrix{
int n,m;
int a[maxn][maxm];
void clear(){
n=m=0;
memset(a,0,sizeof(a));
}
Matrix operator *(const Matrix &b) const{
Matrix tmp;
tmp.clear();
tmp.n=n;tmp.m=b.m;
for(int i=0;i<n;i++)
for(int j=0;j<b.m;j++)
for(int k=0;k<m;k++)
tmp.a[i][j]+=a[i][k]*b.a[k][j];
return tmp;
}
};
void Pow(int m){
Matrix s;
s.clear();
s.n=s.m=4;
s.a[3][3]=1;s.a[3][2]=5;
s.a[3][1]=1;s.a[3][0]=-1;
s.a[1][2]=1;s.a[2][3]=1;
s.a[0][1]=1;
Matrix ans;
ans.clear();
ans.n=4;
ans.m=1;
ans.a[0][0]=1;
ans.a[1][0]=5;
ans.a[2][0]=11;
ans.a[3][0]=36;
while(m){
if(m&1)
ans=s*ans;
s=s*s;
m>>=1;
}
cout<<ans.a[3][0]<<endl;
}
int main()
{
while(cin>>n>>Mod){
if(!n)
return 0;
if(n<4){
switch(n){
case 1:
cout<<1%Mod<<endl;
break;
case 2:
cout<<5%Mod<<endl;
break;
case 3:
cout<<11%Mod<<endl;
break;
}
continue;
}
Pow(n-4);
}
return 0;
}