#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
int lb(vector<int> &a, int x){
    int l=0,r=int(a.size());
    while (l+1<r){
        int m=(l+r)/2;
        if (a[m]>x){
            r=m;
        } else {
            l=m;
        }
    }
    return a[l];
}
vector<vector<int>> a;
vector<int> tin,tout,d,us;
int d1=0,t2=0;
void dfs(int x){
    us[x]=1;
    d[x]=d1;
    tin[x]=t2;
    t2++;
    for (int i:a[x]){
        if (!us[i]){
            d1++;
            dfs(i);
            d1--;
        }
    }
    tout[x]=t2;
}
int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n,q,a1;
    cin >> n >> q;
    vector<int> sr;
    int r=0;
    us.resize(n);
    d.resize(n);
    tin.resize(n);
    tout.resize(n);
    a.resize(n);
    unordered_map<int,int> o,o1;
    set<vector<int>> f;
    vector<int> s(n);
    for (int i=1;i<n;i++){
        cin >> a1;
        a[a1-1].push_back(i);
        a[i].push_back(a1-1);
        if (a1==1){
            sr.push_back(i);
            o[i]=1;
        }
    }
    for (int i=0;i<n;i++){
        cin >> s[i];
    }
    for (int i:sr){
        f.insert({s[i],i});
    }
    int t1=1;
    vector<int> t(n),it(n),ans(n),u(n);
    for (int i=1;i<n;i++){
        vector<int> y=*f.rbegin();
        f.erase(*f.rbegin());
        r=y[1];
        t[y[1]]=t1;
        it[t1]=y[1];
        t1++;
        for (int j=1;j<int(a[r].size());j++){
            f.insert({s[a[r][j]],a[r][j]});
        }
    }
    for (int i=1;i<n;i++){
        int w=it[i],q=0;
        u[w]++;
        while (true){
            int w1=w;
            w=a[w][0];
            for (int j=1;j<int(a[w].size());j++){
                if (a[w][j]!=w1){
                    q=max(q,u[a[w][j]]);
                }
            }
            if (w==0){
                if (a[w][0]!=w1){
                    q=max(q,u[a[w][0]]);
                }
                break;
            } else {
                u[w]++;
            }
        }
        w=it[i];
        //cout << w << ' ' << q << '\n';
        ans[w]=i-q;
    }
    for (int i=0;i<q;i++){
        cin >> a1;
        cout << ans[a1-1] << ' ';
    }
}
