#include<iostream>#include<cstdio>#define N 10000005#define ll long longusingnamespacestd;
int T,a,b;ll Ans;
int p[1000005],cnt,vis[N],M[N],Mp[N],g[N];
int main()
{
for (int i=2;i<=10000000;i++)//M[i]表示i的最小质因子k的次数,Mp[i]表示k^M[i]
{
if (!vis[i]) p[++cnt]=Mp[i]=i,g[i]=M[i]=1;//i是质数for (int j=1;j<=cnt&&i*p[j]<=10000000;j++)
{
int t=i*p[j];vis[t]=1;
if (i%p[j]==0)//i中存在p[j],p[j]也是i的最小质因子
{
M[t]=M[i]+1;
Mp[t]=Mp[i]*p[j];
int k=i/Mp[i];//k为i中除p[j]外的数if (k==1) g[t]=1;else g[t]=(M[k]==M[t])?-g[k]:0;
break;
}
M[t]=1;//i中没有p[j]
Mp[t]=p[j];
g[t]=(M[i]==1)?-g[i]:0;
}
}
for (int i=1;i<=10000000;i++) g[i]+=g[i-1];//前缀和scanf("%d",&T);
while(T--)
{
scanf("%d%d",&a,&b);
if (a>b) swap(a,b);
Ans=0;
for (int i=1,j;i<=a;i=j+1)//分块
{
j=min(a/(a/i),b/(b/i));
Ans+=(ll)(a/i)*(b/i)*(g[j]-g[i-1]);
}
printf("%lld\n",Ans);
}
return0;
}