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

#define FOR(i, a, b) for(__typeof(b) i = (a); i < (b); ++i)
#define dbg(x) cout << #x << " = " << x << '\n';
#define SOLVE int t; cin >> t; while(t--) solve()
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()

// #define int long long

typedef int32_t i32;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef vector<int> vi;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

// struct SegmentTree{
//     int n;
//     vi t;
//     SegmentTree(int n): n(n), t(2*n) {}
//     void update(int l, int r, int x){
//         for(l += n, r += n; l < r; l >>= 1, r >>= 1){
//             if(l & 1) t[l++] += x;
//             if(r & 1) t[--r] += x;
//         }
//     }
//     int query(int i){
//         int res = 0;
//         for(i += n; i > 0; i >>= 1) res += t[i];
//         return res;
//     }
// };

int t;
vi tin, tout;
vector<vi> g1, g2;

void dfs1(int v){
    tin[v] = t++;
    for(int u : g2[v]){
        dfs1(u);
    }
    tout[v] = t;
}

int mx;

void dfs2(int v, set<pii> &s){
    auto it = s.lower_bound({tin[v], 0});
    bool rem = true, add = true;
    int l = -1, r = -1;
    if(it != s.end()){
        l = it->first, r = it->second;
        if(tin[v] <= l && l < tout[v]){
            add = false;
        }
    }
    if(it != s.begin()){
        it = prev(it);
        l = it->first, r = it->second;
        if(l <= tin[v] && tin[v] < r){
            rem = true;
            // cout << l << ' ' << r << ' ' << tin[v] << '\n';
            s.erase(it);
        }
    }
    if(add) s.emplace(tin[v], tout[v]);
    // cout << v << ":\n";
    // for(auto [l, r] : s){
    //     cout << l << ' ' << r << '\n';
    // }
    for(int u : g1[v]){
        dfs2(u, s);
    }
    mx = max(mx, sz(s));
    if(add) s.erase({tin[v], tout[v]});
    if(rem){
        s.emplace(l, r);
    }
}

void solve(){
    int n; cin >> n; t = 0, mx = 1;
    tin.resize(n), tout.resize(n);
    g1.assign(n, vi());
    g2.assign(n, vi());
    FOR(i, 1, n){
        int j; cin >> j;
        j--;
        g1[j].push_back(i);
    }
    FOR(i, 1, n){
        int j; cin >> j;
        j--;
        g2[j].push_back(i);
    }
    dfs1(0);
    set<pii> s;
    dfs2(0, s);
    cout << mx << '\n';
}

i32 main(){
    // #ifndef LOCAL
    ios::sync_with_stdio(false); cin.tie(nullptr);
    // #endif
    SOLVE;
    // solve();
}