#include<stdio.h>
#include<math.h>
typedef long long int ll;
ll gcd(ll a,ll b){
if(a%b==0)
return b;
else
return gcd(b,a%b);
}
ll power(ll a,ll m){
a=(a*a)%m;
return (a*a)%m;
}
ll power_q(ll n, ll m){
ll ans,x,k,denom =30;
ans=(n/gcd(n,denom));
denom/=gcd(n,denom);
k=((n+1)/gcd(n+1,denom));
ans=ans*k;
if(ans>m)
ans%=m;
denom/=gcd(n+1,denom);
k =((2*n+1)/gcd(2*n+1,denom));
ans=ans*k;
if(ans>m)
ans%=m;
denom/=gcd(2*n+1,denom);
if(denom==1){
k=(3*(n%m)*((n+1)%m )-1);
if(k<0)
k+=m;
ans=ans*k;
if(ans>m)
ans%=m;
}
else{
if(n%5==1)
{
x=n/5;
k=(3 *(5*(x*x)%m+ 3*x) + 1);
ans=ans*k;
//cout<<"k1 "<<k<<"ans= "<<ans<<endl;
if(ans>m)
ans%=m;
}
else
{
x=n/5;
k=(3*(5*(x*x)%m+7*x)+7);
ans=ans*k;
// cout<<"k2= "<<k<<"ans= "<<ans<<endl;
if(ans>m)
ans%=m;
}
}
return ans;
}
int main(){
int t;
ll ans,i,n,m,root,p,q,r,z;
scanf("%d",&t);
while(t--){
ans=0;
scanf("%lld%lld",&n,&m);
if(n<2){
printf("%lld\n",n);
continue;
}
root = sqrt(n*1.0D);
for(i=1;i<=n/(root+1);i++ ){
ans+=((n/i-root)*power(i,m));
if(ans>m)
ans%=m;
if(n/i==10000000000){
p=(1000000000)%m;
q=(10000000001)%m;
r=((2*n+1)/3)%m;
z=(((((3*n)%m)*((n+1)%m))%m)-1+m)%m;
ans+=(((p*q)%m)*((r*z)%m))%m;
// printf("%lld %lld %lld\n",p,q,r);
// printf("%lld %lld\n",z,xi);
}
else
ans+=power_q(n/i,m);
if(ans>m)
ans%=m;
}
if(root==i){
ans=ans+power_q(n/i,m);
if(ans>m)
ans%=m;
}
printf("%lld\n",(ans)%m);
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWF0aC5oPgp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CmxsIGdjZChsbCBhLGxsIGIpewogICAgaWYoYSViPT0wKQogICAgICAgIHJldHVybiBiOwogICAgZWxzZQogICAgICAgcmV0dXJuIGdjZChiLGElYik7CiAgICB9CmxsIHBvd2VyKGxsIGEsbGwgbSl7CiAgICBhPShhKmEpJW07CiAgICByZXR1cm4gKGEqYSklbTsKfQpsbCBwb3dlcl9xKGxsIG4sIGxsIG0pewogICAgbGwgYW5zLHgsayxkZW5vbSA9MzA7CiAgICBhbnM9KG4vZ2NkKG4sZGVub20pKTsKICAgIGRlbm9tLz1nY2QobixkZW5vbSk7CiAgICBrPSgobisxKS9nY2QobisxLGRlbm9tKSk7CiAgICBhbnM9YW5zKms7CmlmKGFucz5tKQogICAgYW5zJT1tOwogICAgZGVub20vPWdjZChuKzEsZGVub20pOwogICAgayA9KCgyKm4rMSkvZ2NkKDIqbisxLGRlbm9tKSk7CiAgICBhbnM9YW5zKms7CmlmKGFucz5tKQogICAgYW5zJT1tOwoKICAgIGRlbm9tLz1nY2QoMipuKzEsZGVub20pOwppZihkZW5vbT09MSl7CiAgICBrPSgzKihuJW0pKigobisxKSVtICktMSk7CmlmKGs8MCkKICAgIGsrPW07CiAgICBhbnM9YW5zKms7CiAgICBpZihhbnM+bSkKICAgIGFucyU9bTsKfQplbHNlewogICAgaWYobiU1PT0xKQogICAgewogICAgeD1uLzU7CiAgICBrPSgzICooNSooeCp4KSVtKyAzKngpICsgMSk7CiAgICBhbnM9YW5zKms7CiAgICAvL2NvdXQ8PCJrMSAiPDxrPDwiYW5zPSAiPDxhbnM8PGVuZGw7CiAgICBpZihhbnM+bSkKICAgICAgICBhbnMlPW07CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICB4PW4vNTsKICAgIGs9KDMqKDUqKHgqeCklbSs3KngpKzcpOwogICAgYW5zPWFucyprOwogIC8vICBjb3V0PDwiazI9ICI8PGs8PCJhbnM9ICI8PGFuczw8ZW5kbDsKICAgIGlmKGFucz5tKQogICAgICAgIGFucyU9bTsKICAgICAgICB9Cn0KICAgIHJldHVybiBhbnM7Cn0KaW50IG1haW4oKXsKICAgIGludCB0OwogICAgIGxsIGFucyxpLG4sbSxyb290LHAscSxyLHo7CiAgICBzY2FuZigiJWQiLCZ0KTsKd2hpbGUodC0tKXsKICAgIGFucz0wOwogICAgc2NhbmYoIiVsbGQlbGxkIiwmbiwmbSk7CmlmKG48Mil7CnByaW50ZigiJWxsZFxuIixuKTsKICAgIGNvbnRpbnVlOwogICAgfQogcm9vdCA9IHNxcnQobioxLjBEKTsKZm9yKGk9MTtpPD1uLyhyb290KzEpO2krKyApewogICAgYW5zKz0oKG4vaS1yb290KSpwb3dlcihpLG0pKTsKICAgIGlmKGFucz5tKQogICAgYW5zJT1tOwogICAgaWYobi9pPT0xMDAwMDAwMDAwMCl7CiAgICAgICAgcD0oMTAwMDAwMDAwMCklbTsKICAgICAgICBxPSgxMDAwMDAwMDAwMSklbTsKICAgICAgICByPSgoMipuKzEpLzMpJW07CiAgICB6PSgoKCgoMypuKSVtKSooKG4rMSklbSkpJW0pLTErbSklbTsKICAgIGFucys9KCgocCpxKSVtKSooKHIqeiklbSkpJW07CiAgICAgLy8gcHJpbnRmKCIlbGxkICVsbGQgJWxsZFxuIixwLHEscik7CiAgICAgLy8gcHJpbnRmKCIlbGxkICVsbGRcbiIseix4aSk7CiAgICB9CiAgICBlbHNlCiAgICBhbnMrPXBvd2VyX3Eobi9pLG0pOwogICAgaWYoYW5zPm0pCiAgICBhbnMlPW07CiAgICB9CmlmKHJvb3Q9PWkpewphbnM9YW5zK3Bvd2VyX3Eobi9pLG0pOwogICAgaWYoYW5zPm0pCiAgICBhbnMlPW07Cn0KcHJpbnRmKCIlbGxkXG4iLChhbnMpJW0pOwp9CiAgICByZXR1cm4gMDsKfQo=