#include <bits/stdc++.h>
using namespace std;
const int nx=1e5+5;
int n, k, p, a[nx], lvl[nx], sz[nx], in[nx], out[nx], rv[nx], t, f[nx];
vector<int> adj[nx], g[nx];
pair<int, int> res;
void dfs(int u, int p)
{
if (u!=p) lvl[u]=lvl[p]+1;
sz[u]=1;
in[u]=++t;
rv[t]=u;
for (auto v:adj[u]) dfs(v, u), sz[u]+=sz[v];
out[u]=t;
}
void sack(int u, bool rem)
{
pair<int, int> hv;
for (auto v:adj[u]) hv=max(hv, {sz[v], v});
for (auto v:adj[u]) if (v!=hv.second) sack(v, 1);
if (hv.second) sack(hv.second, 0);
for (auto v:adj[u]) if (v!=hv.second) for (int i=in[v]; i<=out[v]; i++) f[lvl[rv[i]]]++;
f[lvl[u]]++;
vector<int> log;
int cnt=0, sw=0;
for (auto v:g[a[u]]) if (in[u]<=in[v]&&out[v]<=out[u]) cnt++, log.push_back(lvl[v]), f[lvl[v]]--;
for (auto v:g[a[u]]) if (!(in[u]<=in[v]&&out[v]<=out[u])&&f[lvl[v]]) f[lvl[v]]--, cnt++, sw++, log.push_back(lvl[v]);
for (auto x:log) f[x]++;
// cout<<"debug "<<u<<" : ";
// for (int i=0;i <n; i++) cout<<f[i]<<' ';
// cout<<'\n';
res=max(res, {cnt, -sw});
if (rem) for (int i=in[u]; i<=out[u]; i++) f[lvl[rv[i]]]--;
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>k;
for (int i=0; i<n; i++) cin>>a[i], g[a[i]].push_back(i);
for (int i=1; i<n; i++) cin>>p, adj[p].push_back(i);
dfs(0, 0);
sack(0, 0);
cout<<res.first<<' '<<-res.second<<'\n';
}