RT。。
#include <cstdio>
#include <cstring>
using namespace std;
int m, n, p;
int a[2] = {2, 1}, b[4] = {1, 1, 1, 0};
void po2()
{
int t[4];
t[0] = b[0]*b[0] + b[1]*b[2];
t[1] = b[0]*b[1] + b[1]*b[3];
t[2] = b[2]*b[0] + b[3]*b[2];
t[3] = b[2]*b[1] + b[3]*b[3];
for(int i = 0; i < 4; i++) b[i] = t[i]%p;
}
void mul()
{
int temp = a[0]*b[0] + a[1]*b[1];
a[1] = (a[0]*b[2] + a[1]*b[3]) % p;
a[0] = temp % p;
}
int main()
{
// freopen("1","w",stdout);
scanf("%d", &m);
while(m--) {
scanf("%d%d", &n, &p);
// p = 2009;
// for(int n1 = 1; n1 <= 1000; n1++) {
// n = n1;
a[0] = 2; a[1] = 1;
b[0] = b[1] = b[2] = 1;
b[3] = 0;
n--;
while(n) {
if(n & 1) mul();
n /= 2;
po2();
}
printf("%d\n",a[1]);
}
return 0;
}