#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MUMAX 10000001
ll t, a, b;
vector<ll> prime;
int mu[MUMAX];
ll f(ll a, ll b){
ll m = min(a, b);
ll ans = 0;
for(int i=0; i < prime.size() && prime[i] <= m; i++){
ll ub = m/prime[i];
for(int j=1; j <= ub; j++){
ans += mu[j]*(a/prime[i]/j)*(b/prime[i]/j);
}
}
return ans;
}
void calc_mu(){
bool is_composite[MUMAX];
fill(is_composite, is_composite + MUMAX, false);
is_composite[0] = is_composite[1] = true;
mu[1] = 1;
for(int i = 2; i < MUMAX; ++i){
if (!is_composite[i]){
prime.push_back(i);
mu[i] = -1;
}
for(int j = 0; j < prime.size () && i * prime[j] < MUMAX; ++j){
is_composite[i * prime[j]] = true;
mu[i * prime[j]] = -mu[i];
if (i % prime[j] == 0){
mu[i * prime[j]] = 0;
break;
}
}
}
}
int main()
{
calc_mu();
cin >> t;
while(t--){
cin >> a >> b;
cout << f(a, b) << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwojZGVmaW5lIE1VTUFYIDEwMDAwMDAxCiAKbGwgdCwgYSwgYjsKdmVjdG9yPGxsPiBwcmltZTsKaW50IG11W01VTUFYXTsKIApsbCBmKGxsIGEsIGxsIGIpewogICAgbGwgbSA9IG1pbihhLCBiKTsKICAgIGxsIGFucyA9IDA7CiAgICBmb3IoaW50IGk9MDsgaSA8IHByaW1lLnNpemUoKSAmJiBwcmltZVtpXSA8PSBtOyBpKyspewogICAgICAgIGxsIHViID0gbS9wcmltZVtpXTsKICAgICAgICBmb3IoaW50IGo9MTsgaiA8PSB1YjsgaisrKXsKICAgICAgICAgICAgYW5zICs9IG11W2pdKihhL3ByaW1lW2ldL2opKihiL3ByaW1lW2ldL2opOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBhbnM7Cn0KIAp2b2lkIGNhbGNfbXUoKXsKICAgIGJvb2wgaXNfY29tcG9zaXRlW01VTUFYXTsKCWZpbGwoaXNfY29tcG9zaXRlLCBpc19jb21wb3NpdGUgKyBNVU1BWCwgZmFsc2UpOwoJaXNfY29tcG9zaXRlWzBdID0gaXNfY29tcG9zaXRlWzFdID0gdHJ1ZTsKCW11WzFdID0gMTsKCWZvcihpbnQgaSA9IDI7IGkgPCBNVU1BWDsgKytpKXsKCQlpZiAoIWlzX2NvbXBvc2l0ZVtpXSl7CiAgICAgICAgICAgIHByaW1lLnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgbXVbaV0gPSAtMTsKCQl9CgkJZm9yKGludCBqID0gMDsgaiA8IHByaW1lLnNpemUgKCkgJiYgaSAqIHByaW1lW2pdIDwgTVVNQVg7ICsrail7CgkJCWlzX2NvbXBvc2l0ZVtpICogcHJpbWVbal1dID0gdHJ1ZTsKCQkJbXVbaSAqIHByaW1lW2pdXSA9IC1tdVtpXTsKCQkJaWYgKGkgJSBwcmltZVtqXSA9PSAwKXsKICAgICAgICAgICAgICAgIG11W2kgKiBwcmltZVtqXV0gPSAwOwogICAgICAgICAgICAgICAgYnJlYWs7CgkJCX0KCQl9Cgl9Cn0KIAogCmludCBtYWluKCkKewogICAgY2FsY19tdSgpOwogICAgY2luID4+IHQ7CiAgICB3aGlsZSh0LS0pewogICAgICAgIGNpbiA+PiBhID4+IGI7CiAgICAgICAgY291dCA8PCBmKGEsIGIpIDw8IGVuZGw7CiAgICB9CiAKICAgIHJldHVybiAwOwp9CiA=
MTAKMTAgMTAKMTAwIDEwMAoxMDAwIDEwMDAKMTAwMDAgMTAwMDAKMTAwMDAwIDEwMDAwMAoxMDAwMDAwIDEwMDAwMAoxMDAwMDAwMCAxMDAwMDAwMAoxMDAwMDAwMCAxMDAwMDAwMAoxMDAwMDAwMCAxMDAwMDAwMAoxMDAwMDAwMCAxMDAwMDAwMA==
10
10 10
100 100
1000 1000
10000 10000
100000 100000
1000000 100000
10000000 10000000
10000000 10000000
10000000 10000000
10000000 10000000