#include<bits/stdc++.h>
using namespace std;
const int N = 50050;
int arr[N],b[N]={0},len;
int k[N],vis[N]={0};
int pre[N];
int if_lis[N],id[N];
int Serach(int num,int low,int high)
{
int mid;
while (low<=high) {
mid=(low+high)>>1;
if (num>=b[mid]) low=mid+1;
else high=mid-1;
}
return low;
}
void DP(int n)
{
len=0;
b[len]=-1;
id[len]=-1;
for(int i=1;i<=n;i++)
{
if(!vis[i])continue;
if(arr[i]>=b[len])
{
len++;
b[len]=arr[i];
id[len]=i;
pre[i]=id[len-1];
}
else
{
int pos=Serach(arr[i],1,len);
b[pos]=arr[i];
pre[i]=id[pos-1];
id[pos]=i;
}
}
memset(if_lis,0,sizeof(if_lis));
int now=id[len];
while(now!=-1)
{
if_lis[now]=1;
now=pre[now];
}
}
int ans[N];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&arr[i]);
for(int i=1;i<=n;i++)scanf("%d",&k[i]);
for(int i=1;i<=n;i++)vis[i]=1;
DP(n);
ans[n]=len;
for(int i=n-1;i>=1;i--)
{
vis[k[i+1]]=0;
if(!if_lis[k[i+1]])
{
ans[i]=ans[i+1];
continue;
}
DP(n);
ans[i]=len;
}
for(int i=1;i<=n;i++)printf("%d%c",ans[i],i==n ? '\n' : ' ');
}
return 0;
}