
// Problem : C. Trees of Tranquillity
// Contest : Codeforces - Codeforces Round #722 (Div. 1)
// URL : https://codeforces.com/contest/1528/problem/C
// Memory Limit : 256 MB
// Time Limit : 3000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#include<bits/stdc++.h>
using namespace std;

#define double long double
#define int long long
#define ALL(x) x.begin(),x.end()
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
#define pb(x) push_back(x)
#define eb emplace_back
#define SORT(ls) sort(ls.begin(), ls.end())
#define DESC(ls) sort(ls.rbegin(), ls.rend()) 
#define mp(x, y) make_pair(x, y)
#define INF 1000000000
#define MOD 998244353 
#define F(i, a, n) for(i=a;i<n;i++)
#define SI(x) cin>>x
#define DI(x, y) cin>>x>>y
#define TI(x, y, z) cin>>x>>y>>z
#define FI(w, x, y, z) cin>>w>>x>>y>>z
#define SO(x) cout<<x<<"\n"
#define DO(x, y) cout<<x<<" "<<y<<"\n"
#define TO(x, y, z) cout<<x<<" "<<y<<" "<<z<< "\n"
#define FO(w, x, y, z) cout<<w<<" "<<x<<" "<<y<<" "<<z<<"\n"
#define FASTER ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)

vii times;
int clk = 0;
int ans;
set<ii> var;

void dfs2(int v, vi adj[])
{
	times[v].first = clk++;
	for(auto i: adj[v])
		dfs2(i, adj);
	times[v].second = clk;
}

int add(int v)
{
	auto iter = var.lower_bound({times[v].first, v});
	if(iter != var.end() && times[iter->second].second <= times[v].second)
		return -1;
	if(iter == var.begin())
		return -2;
	--iter;
	int tmp = iter->second;
	if(times[v].second > times[tmp].second)
		return -2;
	var.erase(iter);
	return tmp;
}


void dfs1(int v, vi adj[])
{
	//SO(v);
	int res = add(v);
	if(res != -1)
		var.insert({times[v].first, v});
	
	ans = max(ans, (int)var.size());
	for(auto i: adj[v])
		dfs1(i, adj);
	if(res != -1)
	{
		var.erase({times[v].first, v});
		if(res != -2)
			var.insert({times[res].first, res});
	}
		
}


int32_t main(void)
{
    FASTER;
    #ifdef LOCAL
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
    int i, j;
    int t;
    SI(t);
    while(t--)
    {
    	var.clear();
    	ans = 0;
    	clk = 0;
    	int n;
    	SI(n);
    	times.resize(n);
    	vi adj1[n];
    	vi adj2[n];
    	F(i, 1, n)
    	{
    		int x;
    		SI(x);
    		--x;
    		adj1[x].pb(i);
    	}
    	F(i, 1, n)
    	{
    		int x;
    		SI(x);
    		--x;
    		adj2[x].pb(i);
    	}
		dfs2(0, adj2);
		dfs1(0, adj1);
		SO(ans);
    }
    
    #ifdef LOCAL
    	cout<<endl<<endl<<"Time: "<<(float)clock()/CLOCKS_PER_SEC<<" seconds"<<endl;
    #endif
    return 0;
}