#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=6e6+50;
unordered_map<int,int>m;
unordered_map<ll,ll>p;
bool vis[maxn];
int mu[maxn],sum_mu[maxn],phi[maxn];
ll sum_phi[maxn];
int cnt,prime[maxn];
void init(int N){
phi[1]=mu[1]=1;
for(int i=2;i<=N;i++){
if(!vis[i]){
prime[++cnt]=i;
mu[i]=-1;phi[i]=i-1;
}
for(int j=1;j<=cnt;j++){
if(i*prime[j]>N)break;
vis[i*prime[j]]=true;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
mu[i*prime[j]]=-mu[i];
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
for(int i=1;i<=N;i++){
sum_mu[i]=sum_mu[i-1]+mu[i];
sum_phi[i]=sum_phi[i-1]+phi[i];
}
}
int getmu(int x){
if(x<=6e6)return sum_mu[x];
if(m[x])return m[x];
int ans=1;
for(int l=2,r;l<=x;l=r+1){
r=x/(x/l);
ans-=(r-l+1)*getmu(x/l);
}
return m[x]=ans;
}
ll getphi(ll x){
if(x<=6e6)return sum_phi[x];
if(p[x])return p[x];
ll ans=x*(x+1)/2;
for(ll l=2,r;l<=x;l=r+1){
r=x/(x/l);
ans-=(r-l+1)*getphi(x/l);
}
return p[x]=ans;
}
int main(){
int t,n;
cin>>t;
init(6e6);
while(t--){
cin>>n;
cout<<getphi(n)<<" "<<getmu(n)<<endl;
}
return 0;
}