#include <fstream>
using namespace std;
ifstream in("pinex.in");
ofstream out("pinex.out");
const long long N=1000000000000LL;
const int RAD = 1e6 + 1;
long long dv[1000],nrprim[100000];
bool c[RAD];
int main()
{
int m,flag;
long long cnt,d,cntd,i,a,b,j;
long long rez;
cntd=0;
/*
for(i=2; i*i<N; i++)
{
flag=1;
for(d=2; d*d<=i; d++)
{
if(i%d==0)
{
flag=0;
break;
}
}
if(flag==1) nrprim[cntd++]=i;
}
*/
for (int i = 2; i < RAD; i++)
{
if (!c[i])
{
for(long long j = (long long)i * i; j < RAD; j += i)
{
c[j] = true;
}
nrprim[cntd++] = i;
}
}
flag=0;
i++;
while(flag==0)
{
flag=1;
for(d=2; d*d<=i; d++)
{
if(i%d==0)
{
flag=0;
break;
}
}
if(flag==1) nrprim[cntd++]=i;
i++;
}
in>>m;
for(int k=1; k<=m; k++)
{
in>>a>>b;
cnt=0;
d=0;
while(nrprim[d]*nrprim[d] <= b)
{
if(b%nrprim[d]==0)
{
dv[cnt++]=nrprim[d];
while(b%nrprim[d]==0)
{
b/=nrprim[d];
}
}
d++;
}
if(b>1) dv[cnt++]=b;
rez = 0;
for(i=0; i<(1<<cnt); i++)
{
long long nre = 0, prod = 1;
for(j=0; j<cnt; j++)
{
if(i&(1<<j))
{
prod *= dv[j];
nre++;
}
}
if (nre % 2 == 0)
{
rez += a / prod;
}
else
{
rez -= a / prod;
}
}
out << rez << "\n";
}
return 0;
}