#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
#define MAX 99999999
//const ll mod = 1000000007;
bool primes[MAX+5];
ll prime[5761500];
ll counter = 0;
void sieve()
{
memset(primes, false, sizeof(primes));
for(ll i = 2; i * i < MAX; i++)
if(!primes[i])
{
prime[counter++] = i;
for(ll j = i*2; j < MAX; j += i)
primes[j] = true;
}
}
ll power(ll x, ll y)
{
ll count = 0;
ll z = y;
while(x >= z)
{
count += (x/z);
z *= y;
}
return count;
}
ll mulmod(ll a, ll b, ll mod)
{
ll res = 0;
a = a % mod;
while (b > 0)
{
if (b % 2 == 1)
res = (res + a) % mod;
a = (a * 2) % mod;
b /= 2;
}
return res % mod;
}
int main()
{
//your code goes here
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
ll t, n;
sieve();
cin>>t;
while(t--)
{
ll m; cin>>n>>m;
ll ans=1;
for(ll i = 0; i < counter; i++)
{
if(prime[i]%2 == 0) continue;
ll powers = power(n, prime[i]);
if(powers == 0) break;
ans = mulmod(ans, powers+1, m)%m;
}
if(((ans - 1) % m) < 0)
printf("%lld\n", ((ans - 1 + m) % m));
else
printf("%lld\n", (ans - 1) % m);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGxsOwojZGVmaW5lIE1BWCA5OTk5OTk5OQovL2NvbnN0IGxsIG1vZCA9IDEwMDAwMDAwMDc7CmJvb2wgcHJpbWVzW01BWCs1XTsKbGwgcHJpbWVbNTc2MTUwMF07CmxsIGNvdW50ZXIgPSAwOwogCnZvaWQgc2lldmUoKQp7CgltZW1zZXQocHJpbWVzLCBmYWxzZSwgc2l6ZW9mKHByaW1lcykpOwoJZm9yKGxsIGkgPSAyOyBpICogaSA8IE1BWDsgaSsrKQoJCWlmKCFwcmltZXNbaV0pCgkJewoJCQlwcmltZVtjb3VudGVyKytdID0gaTsKCQkJZm9yKGxsIGogPSBpKjI7IGogPCBNQVg7IGogKz0gaSkKCQkJcHJpbWVzW2pdID0gdHJ1ZTsKCQl9Cn0KCmxsIHBvd2VyKGxsIHgsIGxsIHkpCnsKCWxsIGNvdW50ID0gMDsKCWxsIHogPSB5OwoJd2hpbGUoeCA+PSB6KQoJewoJCWNvdW50ICs9ICh4L3opOwoJCXogKj0geTsKCX0KCXJldHVybiBjb3VudDsKfQpsbCBtdWxtb2QobGwgYSwgbGwgYiwgbGwgbW9kKQp7CiAgICBsbCByZXMgPSAwOyAKICAgIGEgPSBhICUgbW9kOwogICAgd2hpbGUgKGIgPiAwKQogICAgewogICAgICAgIGlmIChiICUgMiA9PSAxKQogICAgICAgICAgICByZXMgPSAocmVzICsgYSkgJSBtb2Q7CiAgICAgICAgYSA9IChhICogMikgJSBtb2Q7CiAgICAgICAgYiAvPSAyOwogICAgfQogICAgcmV0dXJuIHJlcyAlIG1vZDsKfQogCiAKaW50IG1haW4oKSAKewoJLy95b3VyIGNvZGUgZ29lcyBoZXJlCglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsJY2luLnRpZSgwKTsJY291dC50aWUoMCk7CglsbCB0LCBuOwoJc2lldmUoKTsKCWNpbj4+dDsKCXdoaWxlKHQtLSkKCXsKCQlsbCBtOyAgICBjaW4+Pm4+Pm07CgkJbGwgYW5zPTE7CgkJZm9yKGxsIGkgPSAwOyBpIDwgY291bnRlcjsgaSsrKQoJCXsKCQkJaWYocHJpbWVbaV0lMiA9PSAwKSBjb250aW51ZTsKCQkJbGwgcG93ZXJzID0gcG93ZXIobiwgcHJpbWVbaV0pOwoJCQlpZihwb3dlcnMgPT0gMCkgCWJyZWFrOwoJCQlhbnMgPSBtdWxtb2QoYW5zLCBwb3dlcnMrMSwgbSklbTsKCQl9CgkJaWYoKChhbnMgLSAxKSAlIG0pIDwgMCkKCQkJcHJpbnRmKCIlbGxkXG4iLCAoKGFucyAtIDEgKyBtKSAlIG0pKTsKCQllbHNlCgkJCXByaW50ZigiJWxsZFxuIiwgKGFucyAtIDEpICUgbSk7Cgl9CglyZXR1cm4gMDsKfSAgIA==