#include using namespace std; #define y1 y114514 #define pb push_back #define mkp make_pair #define fi first #define se second #define all(a) a.begin(), a.end() typedef pair pii; typedef unsigned long long ull; typedef long long ll; const int M = 1000000007; const int maxn = 1000005; int mu[maxn]; int pri[maxn]; bool nop[maxn]; int tot; int sum[maxn]; int sn[maxn]; int sm[maxn]; void moebius_table(){ mu[1] = 1; ll ta; for(int i = 2; i <= 1000000; i++){ if(!nop[i]) pri[++tot] = i, mu[i] = -1; for(int j = 1; j <= tot && (ta = (ll) i * pri[j]) <= 1000000; j++){ nop[ta] = 1; if(i % pri[j]) mu[ta] = -mu[i]; else{ mu[ta] = 0; break; } } } } int main(){ moebius_table(); for(int i = 1; i <= 1000000; ++i) sum[i] = sum[i - 1] + mu[i]; int T, n, m; cin >> T; while(T--){ cin >> n >> m; if(n > m) swap(n, m); ll ans = 0; memset(sn, 0, sizeof(sn)); memset(sm, 0, sizeof(sm)); for(int d = 1; d <= n; ++d) for(int i = d; i <= n; i += d) sn[d] += mu[i]; for(int d = 1; d <= m; ++d) for(int i = d; i <= m; i += d) sm[d] += mu[i]; for(int g = 1; g <= n; ++g){ if(mu[g] == 0) continue; ll tmp = 0; for(int d = 1; d * g <= n; ++d) tmp += 1LL * mu[d] * sn[g * d] * sm[g * d]; ans += mu[g] * tmp; } cout << ans << '\n'; } return 0; }