LL primes[N] , mul[N] , sum[N]; int cnt; bool st[N];
voidinit(int x){ mul[1] = 1; for(int i = 2 ; i <= x ; i ++){ if(!st[i]){ primes[cnt ++] = i; mul[i] = -1; } for(int j = 0 ; j < cnt && primes[j] <= x / i ; j ++){ st[primes[j] * i] = true; if(i % primes[j] == 0){ mul[primes[j] * i] = 0; break; } mul[primes[j] * i] = -mul[i]; } } for(int i = 0 ; i < cnt ; i ++) for(int j = 1 ; primes[i] * j <= x ; j ++) sum[primes[i] * j] += mul[j]; for(int i = 1 ; i <= x ; i ++) sum[i] = sum[i - 1] + sum[i]; }
intmain(){ int T; cin >> T ; init(N - 50); while(T --){ int n , m; cin >> n >> m; if(n < m)swap(n , m); LL res = 0; for(int l = 1 , r ; l <= m ; l = r + 1){ r = min(n / (n / l) , m / (m / l)); r = min(r , m); res += (LL)(n / l) * (LL)(m / l) *(sum[r] - sum[l - 1]); } printf("%lld\n" , res); } return0; }