#pragma GCC optimize("O2")
#pragma GCC optimize("Ofast")
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <queue>
using namespace std;
int const N=3e5+10;
vector<int>nei[N];
int P[N];
int val[N];
int dn[N];
int sz[N];
int ans[N];
int qu[N];
priority_queue<pair<int,int>>s;
int mx=0;
int tm1=0;
void dfs3(int u)
{
	sz[u]=1;
	ans[u]=tm1++;
	ans[u]-=mx;
	vector<pair<int,int>>g;
	for (auto i:nei[u])
		g.push_back({val[i],i});
	sort(begin(g),end(g));
	while (g.size())
	{
		dfs3(g.back().second);
		g.pop_back();
	}
	for (auto i:nei[u])
		sz[u]+=sz[i];
	mx=max(mx,sz[u]);
}
void dfs2(int u)
{
	sz[u]=dn[u];
	for (auto i:nei[u])
	{
		dfs2(i);
		sz[u]+=sz[i];
	}
}
void dfs1()
{
	s.push({val[1],1});
	int t=0;
	while (s.size())
	{
		int u=s.top().second;
		dn[u]=1;
		s.pop();
		if (qu[u])
		{
			ans[u]=t;
			dfs2(1);
			int z=u;
			int f=0;
			while (P[z]!=-1)
			{
				for (auto i:nei[P[z]])
				{
					if (i!=z) f=max(f,sz[i]);
				}
				z=P[z];
			}
			for (auto j:nei[u])
				f=max(f,sz[j]);
			ans[u]-=f;
		}
		t++;
		for (auto i:nei[u])
			s.push({val[i],i});
	}
}
void dfs(int u,int t)
{
	ans[u]=t;
	if (u!=1)
		s.pop();
	ans[u]=t;
	if (qu[u])
	{
		int z=u;
		int f=0;
		while (P[z]!=-1)
		{
			for (auto i:nei[P[z]])
			{
				if (i==z) continue;
				f=max(f,dn[i]);
			}
			z=P[z];
		}
		for (auto i:nei[u])
			f=max(f,dn[i]);
		ans[u]-=f;
	}
	int z=u;
	while (z!=-1)
	{
		dn[z]++;
		z=P[z];
	}
	for (auto i:nei[u])
		s.push({val[i],i});
	if (s.size())
		dfs(s.top().second,t+1);
}
inline void solve()
{
	int n,q;
	cin>>n>>q;
	P[1]=-1;
	bool subt8=1;
	for (int i=2;i<=n;i++)
	{
		int x;
		cin>>x;
		P[i]=x;
		nei[x].push_back(i);
	}
	for (int i=1;i<=n;i++)
		cin>>val[i];
	for (int i=2;i<=n;i++)
	{
		if (val[i]<val[P[i]])
			subt8=0;
	}
	vector<int>g;
	for (int i=1;i<=q;i++)
	{
		int x;
		cin>>x;
		qu[x]=i;
		g.push_back(x);
	}
	if (subt8)
	{
		dfs3(1);
	}
	else if (q<=100)
	{
		dfs1();
	}
	else
		dfs(1,0);
	for (auto i:g)
		cout<<ans[i]<<' ';
	cout<<endl;
}
signed main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(NULL);cout.tie(NULL);
	int t=1;
	// cin>>t;
	while (t--)
		solve();
}