#include "september.h"
#include <bits/stdc++.h>
#include <vector>
using namespace std;
const int maxN = 1e5+1;
vector<int> links[maxN];
vector<bool> rem(maxN);
vector<int> step(maxN);
int counter[5];
void getSub(int node, int token, int m){
if(rem[node])return;
rem[node] = true;
step[node] = token;
//on compte en plus
for(int i = 0 ; i < m ; i++)counter[i]++;
for(int u:links[node])
getSub(u, token, m);
}
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
for(int i = 0 ; i < N ; i++)links[i].clear();
for(int i = 1 ; i < N ; i++){
links[F[i]].push_back(i);
}
fill(rem.begin(), rem.end(), false);
fill(step.begin(), step.end(), 0);
fill(counter, counter+5, 0);
unordered_set<int> SET;
int act = 0;
int ans = 0;
while(act < N -1){
ans++;
do{
for(int j = 0 ; j <M ; j++)getSub(S[j][act], ans, M);
for(int j = 0 ; j < M ; j++)counter[j]--;
act++;
}while(counter[0] || counter[1] ||counter[2]||counter[3]||counter[4]);
}
return ans;
}