/*
TASK: fib
LANG: C
*/
#include <stdio.h>
#define maxM 10000005

int n,m;
int sum[maxM], len;

void solve()
{
     int p=3,a=1,b=1,c,k,flag;
     sum[1] = 1;
     sum[2] = 2; 
     if (m == 1) {printf("0\n");return;}
     do {
        c = (a+b) % m;
        a = b; b = c;
        sum[p] = sum[p-1] + c;
        if (p%3==0)
           if (sum[p/3] == (sum[2*p/3]-sum[p/3]) && sum[p/3] == (sum[p]-sum[2*p/3])){
              int x,y,z;
              flag = 1;
              x = sum[k] - sum[k-1];
              y = sum[p/3+k] - sum[p/3+k-1];
              z = sum[2*p/3+k] - sum[2*p/3+k-1];
              for (k=1;k<=p/3;++k) if (!(x == y && x == z)) {flag = 0;break;}
              if (flag){
                 len = p/3;
                 break;
                 }
              }
        ++p;
        } while (1);
     /*for (p=1;p<=len;++p) printf("%d ",sum[p]-sum[p-1]);
     printf("\nlen=%d\n",len);*/
     k = n%len;
     if (k == 0) printf("%d\n",sum[len]-sum[len-1]);
     else printf("%d\n",sum[k] - sum[k-1]);
}

int main()
{
    scanf("%d",&n);
    scanf("%d",&m);
    solve();
    return 0;
}
