#include #define maxn 1000010 using namespace std; typedef long long ll; int n,m; int T; ll sum1[maxn],sum2[maxn]; bool isprime[maxn]; int prime[maxn],primesize; int miu[maxn]; ll f[maxn]; void get() { memset(isprime,true,sizeof(isprime)); miu[1]=1; isprime[1]=false; for(int i=1;i<=maxn-10;i++) { if(isprime[i]) { prime[++primesize]=i; miu[i]=-1; } for(int j=1;j<=primesize&&i*prime[j]<=maxn-10;j++) { isprime[i*prime[j]]=false; if(i%prime[j]==0) { miu[i*prime[j]]=0; break; } else miu[i*prime[j]]=-miu[i]; } } for(int i=1;i<=maxn-10;i++) { for(int j=i;j<=maxn-10;j+=i) { f[j]+=miu[i]*miu[j/i]; } } } int main() { get(); cin>>T; while(T--) { memset(sum1,0,sizeof(sum1)); memset(sum2,0,sizeof(sum2)); cin>>n>>m; int N=min(n,m); for(int i=1;i<=n;i++) for(int j=1;j<=n/i;j++) sum1[i]+=miu[i*j]; for(int i=1;i<=m;i++) for(int j=1;j<=m/i;j++) sum2[i]+=miu[i*j]; ll ans=0; for(int i=1;i<=min(n,m);i++) ans+=sum1[i]*sum2[i]*f[i]; printf("%I64d\n",ans); } return 0; }