#include <bits/stdc++.h>
using namespace std;
const int maxn = 300000 + 10;
struct Edge{
	int v, next;
	Edge(int v = 0, int next = 0): v(v), next(next){}
}e1[maxn], e2[maxn];
int fir1[maxn], fir2[maxn];
int ecnt1, ecnt2;
void add1(int u, int v){
	e1[++ecnt1] = Edge(v, fir1[u]); fir1[u] = ecnt1;
}
void add2(int u, int v){
	e2[++ecnt2] = Edge(v, fir2[u]); fir2[u] = ecnt2;
}
int idx, fa[maxn], in[maxn], out[maxn], siz[maxn], top[maxn], son[maxn], pos[maxn], pcnt;
int zs[maxn], gen[maxn], n;
int query(int* arr, int pos){
	int s = 0;
	for(; pos; pos -= pos & -pos){
		s += arr[pos];
	}
	return s;
}
void add(int* arr, int pos, int val){
	for(; pos <= n; pos += pos & -pos){
		arr[pos] += val;
	}
}
void dfs2(int u){
	in[u] = ++idx;
	siz[u] = 1;
	son[u] = 0;
	for(int i = fir2[u]; i; i = e2[i].next){
		int v = e2[i].v;
		dfs2(v);
		siz[u] += siz[v];
		if(siz[v] > siz[son[u]]) son[u] = v;
	}
	out[u] = idx;
}
void dfs3(int u){
	pos[u] = ++pcnt;
	if(son[u]){
		top[son[u]] = top[u];
		dfs3(son[u]);
	}
	for(int i = fir2[u]; i; i = e2[i].next){
		int v = e2[i].v;
		if(v == son[u]) continue;
		top[v] = v;
		dfs3(v);
	}
}
int query_gen(int u){
	int ret = 0;
	while(u){
		ret += query(gen, pos[u]) - query(gen, pos[top[u]] - 1);
		u = fa[top[u]];
	}
	return ret;
}
int ans;
void dfs1(int u, int tot){
	int t = query(zs, out[u]) - query(zs, in[u] - 1);
	if(t == 0){
		int s = query_gen(u);
		if(s != 0){
			tot--;
			add(gen, pos[s], -s);
		}
		add(gen, pos[u], u);
		add(zs, in[u], 1);
		tot++;
//		printf("t = %d s = %d u = %d tot = %d\n", t, s, u, tot);
		ans = max(ans, tot);
		for(int i = fir1[u]; i; i = e1[i].next){
			
			int v = e1[i].v;
//			printf("u = %d v = %d\n", u, v);
			dfs1(v, tot);
		}
		if(s != 0){
			tot++;
			add(gen, pos[s], s);
		}
		add(gen, pos[u], -u);
		add(zs, in[u], -1);
		tot--;
	}
	else{
//		printf("u = %d tot = %d\n", u, tot);
		for(int i = fir1[u]; i; i = e1[i].next){
			
			int v = e1[i].v;
//			printf("u = %d v = %d\n", u, v);
			dfs1(v, tot);
		}
	}
}
int main(){
	int t;
	cin >> t;
	while(t--){
		cin >> n;
		ecnt1 = ecnt2 = pcnt = 0;
		for(int i = 1; i <= n; i++){
			fir1[i] = fir2[i] = 0;
		}
		for(int i = 2; i <= n; i++){
			int x;
			cin >> x;
			add1(x, i);
		}
		for(int i = 2; i <= n; i++){
//			int x;
//			cin >> x;
			cin >> fa[i];
			add2(fa[i], i);
		}
		idx = 0;
		dfs2(1);
		top[1] = 1;
		dfs3(1);
//		for(int i = 1; i <= n; i++){
//			printf("i = %d in = %d out = %d top = %d\n", i, in[i], out[i], top[i]);
//		}
		ans = 1;
		dfs1(1, 0);
		cout << ans << endl;
	}
	return 0;
}