#include<bits/stdc++.h>
#include<math.h>
#define rep(i,k,n) for(int i=k;i<n;i++)
#define ll long long
#define MOD 1000000007ll
#define ROD 1000000009ll
#define INF 1e18
#define MIN(a,b) (a>b?b:a)
using namespace std;
#define mp make_pair
#define pb push_back
#define  piii pair<pair<ll,ll>,ll>
#define pii pair<ll,ll>
#define fi first
#define se second
#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#define time__(d) \
    for ( \
        auto blockTime = make_pair(chrono::high_resolution_clock::now(), true); \
        blockTime.second; \
        debug("%s: %lld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
    )

#define ll long long
#define MAXN 600000

ll t,n,ans,tr[MAXN];
ll st[MAXN],en[MAXN],sr[MAXN],tim;
vector <ll> qr[MAXN];
vector <ll> vr[MAXN];
void upd(ll idx,ll val)
{
	while(idx<=2*n)
	{
		tr[idx]+=val;
		idx+=(idx&-idx);
	}
}
ll query(ll idx)
{
	ll ans=0;
	while(idx)
	{
		ans+=tr[idx];
		idx-=(idx&-idx);
	}
	return ans;
}
ll ff(ll,ll);
void dfs(ll,ll);
int main()
{
	scanf("%lld",&t);
	while(t--)
	{
		tim=1,ans=0;
		rep(i,0,2*n+5)
		st[i]=en[i]=sr[i]=tr[i]=0,qr[i].clear(),vr[i].clear();

		scanf("%lld",&n);
		rep(i,2,n+1)
		{
			ll x;
			scanf("%lld ",&x);
			qr[x].pb(i);
		}

		rep(i,2,n+1)
		{
			ll x;
			scanf("%lld",&x);
			vr[x].pb(i);
		}
		dfs(1,0);
		printf("%lld\n",ff(1,0));

	}
}
ll ff(ll idx,ll p)
{
	// cout<<"IDX: "<<idx<<" P: "<<p<<" query: "<<query(st[idx])<<"  st:"<<st[idx]<<"\n";
	ll qq = query(st[idx]), ans=0;

	if(qq==0)
	{
		upd(st[idx],idx);
		upd(en[idx],-idx);
	} 
	else
	{
		upd(st[idx],idx);
		upd(en[idx],-idx);
		upd(st[qq],-qq);
		upd(en[qq],qq);
	}
	// cout<<"WW ";
	for(auto x: qr[idx])
	{
		ans = max(ans,ff(x,idx));
	}
	// cout<<"HERE";
	if(qq==0)
	{
		upd(st[idx],-idx);
		upd(en[idx],idx);
	}	
	else
	{
		upd(st[idx],-idx);
		upd(en[idx],idx);
		upd(st[qq],qq);
		upd(en[qq],-qq);
	}
	// cout<<"END: "<<idx<<"\n";
	return ans + (qq==0);
}
void dfs(ll idx,ll p)
{
	st[idx]=tim++;
	for(auto x: vr[idx])
	{
		dfs(x,idx);
	}
	en[idx]=tim++;
	// cout<<"I: "<<idx<<" "<<st[idx]<<" "<<en[idx]<<"\n";
}