#include "september.h"
#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define vl vector<ll>
#define vi vector<int>
#define pb push_back
#define sz(v) (ll)(v.size())
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define f first
#define s second
#define pii pair<int, int>
#define pll pair<ll, ll>
using namespace std;
const int sz = 1e5+5;
vi g[sz];
int vis[sz], ord[sz];
vector<pii>vect;
void dfs(int node)
{
vis[node] = 1;
for(auto u : g[node])
{
if(vis[u])
continue;
if(ord[node] < ord[u])
vect.pb({ord[u], ord[node]});
ord[u] = min(ord[u], ord[node]);
dfs(u);
}
}
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
for(int i = 1; i < N; i++)
{
g[i].pb(F[i]);
g[F[i]].pb(i);
}
int res = 1;
for(int i = 0; i < M; i++)
{
for(int j = 0; j < N; j++)
ord[S[i][j]] = j;
dfs(0);
int cnt = 0;
set<int>st[N];
for(auto u : vect)
{
st[u.f].insert(1);
st[u.s].insert(-1);
}
int f = 0;
for(int j = 0; j < N; j++)
{
for(auto u : st[j])
f += u;
if(!f)
cnt++;
}
res = max(res, cnt);
}
for(int i = 0; i < N; i++)
{
g[i].clear();
vis[i] = 0;
ord[i] = 0;
}
vect.clear();
return res;
}