#include "september.h"
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
using namespace std;
using ll = long long;
template<typename T>
using vec = vector<T>;
using vll = vec<ll>;
using vvll = vec<vll>;
using str = string;
using pll = pair<ll,ll>;
#define pb push_back
#define sps << " " <<
#define sp << " "
#define fi first
#define se second
#define nl << endl
vvll kids;
vec<bool> vis;
set<ll> waiting;
map<ll,ll> freq;
void dfs(ll u) {
if(vis[u]) return;
vis[u] = 1;
for(ll &v : kids[u]) {
dfs(v);
waiting.insert(v);
}
}
int solve(int N, int M, vec<int> F, vec<vec<int>> S) {
kids.resize(N);
vis.assign(N,0);
for(int i = 1; i < N; i++) {
kids[F[i]].pb(i);
}
ll ans = 0;
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
dfs(S[j][i]);
freq[S[j][i]]++;
if(freq[S[j][i]] == M) {
waiting.erase(S[j][i]);
}
if(waiting.size() == 0) ans++;
}
}
return ans;
}