#include<bits/stdc++.h>
using namespace std;
//#define int long long
#ifndef ONLINE_JUDGE
#define dbg(x...) do{cout << "\033[32;1m" << #x << "->" ; err(x);} while(0)
void err(){cout << "\033[39;0m" << endl;}
template<template<typename...> class T,typename t,typename... A>
void err(T<t> a,A... x){for (auto v:a) cout << v << ' '; err(x...);}
template<typename T,typename... A>
void err(T a,A... x){cout << a << ' '; err(x...);}
#else
#define dbg(...)
#endif
typedef long long ll;
typedef pair<int,int> pi;
typedef vector<int> vi;
template<class T> using vc=vector<T>;
template<class T> using vvc=vc<vc<T>>;
template<class T> void mkuni(vector<T>&v)
{
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
}
template<class T>
void print(T x,int suc=1)
{
    cout<<x;
    if(suc==1) cout<<'\n';
    else cout<<' ';
}
template<class T>
void print(const vector<T>&v,int suc=1)
{
    for(int i=0;i<v.size();i++)
        print(v[i],i==(int)(v.size())-1?suc:2);
}
const int maxn=1e6+7;

int main(){
	int t; cin>>t;
	while(t--){
		int n;
		cin>>n;
		vi a(n,-1),b(n,-1);
		for(int i=1;i<=n-1;++i){
			cin>>a[i];
			a[i]--; 
		} 
		for(int i=1;i<=n-1;++i){
			cin>>b[i];
			b[i]--;
		}
		vc<vi> G(n);
		for(int i=1;i<n;++i) {
			G[b[i]].push_back(i);
		}
		vi in(n),out(n),id(n+1);
		int tot=0;
		function<void(int)> dfs=[&](int u){
			in[u]=++tot;
			id[in[u]]=u;
			for(auto v:G[u]){
				dfs(v);
			}
			out[u]=tot;
		};
		dfs(0);
	
		for(int i=0;i<n;++i) G[i].clear();
		for(int i=1;i<n;++i){
			G[a[i]].push_back(i);
		}
		int ans=0;
		set<int> s;
		function<void(int)> ddfs=[&](int u){
			bool add=false;
			int del=-1;
			auto it=s.lower_bound(in[u]);
			if(it==s.end()||*it>=out[u]){
				if(it!=s.begin()){
					--it;
					if(out[id[*it]]>=out[u]){
						del=*it;
						s.erase(it);
					}
				}
				s.insert(in[u]);
				add=true;
			}
			ans=max(ans,(int)s.size());
			for(auto v:G[u]){
				ddfs(v);
			}
			if(add){
				s.erase(in[u]);
				if(del!=-1) s.insert(del);
			}
		};
		ddfs(0);
		print(ans);
	}
} 