#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
typedef long long ll;
string file = "pinex";
ifstream fin (file + ".in");
ofstream fout (file + ".out");
int v[20], cap;
void divizori(ll x)
{
cap = 0;
if (!(x & 1))
{
v[cap++] = 2;
while (!(x&1))
{
x /= 2;
}
}
for (int d = 3; 1ll*d*d<=x; d+=2)
{
if (x % d == 0)
{
v[cap++] = d;
while (x % d == 0)
x /= d;
}
}
if (x>1)
v[cap++] = x;
}
ll n, x;
ll bkt(ll multiplu, int k, int ind)
{
ll s(0);
if (k == 0)
{
ll a = multiplu, b= n/multiplu*multiplu;
//cout << a << ' ' << b << ' ' << multiplu << endl;
if (a<=b)
{
s = (b-a)/multiplu + 1;
}
}
else
{
for (int i = ind; i<cap; i++)
{
s += bkt(multiplu*v[i],k-1,i+1);
}
}
return s;
}
ll solve()
{
divizori(x);
ll s = 0;
for (int i=1; i<=cap; i++)
{
ll f = bkt(1,i,0);
if (i&1)
{
s += f;
}
else
{
s -= f;
}
}
return s;
}
int main ()
{
int m;
fin >> m;
while (m--)
{
fin >> n >> x;
fout << n-solve() << '\n';
//cout << "\n\n------------------\n\n";
}
}