#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) {
vis[u] = 1;
waiting.insert(u);
for(ll &v : kids[u]) {
if(vis[v]) continue;
dfs(v);
}
}
int solve(int N, int M, vec<int> F, vec<vec<int>> S) {
kids.clear();
kids.resize(N);
vis.assign(N,0);
freq.clear();
for(int i = 1; i < N; i++) {
kids[F[i]].pb(i);
}
ll ans = 0;
for(int i = 0; i < N-1; i++) {
for(int j = 0; j < M; j++) {
ll at = S[j][i];
waiting.insert(at);
freq[at]++;
if(!vis[at]) dfs(at);
vis[at] = 1;
if(freq[at] == M) {
waiting.erase(at);
}
}
if(waiting.size() == 0) ans++;
}
return ans;
}