#include<bits/stdc++.h>

using namespace std;
#define int long long

int maxn = 3e5;
vector<vector<int>> g(maxn);
vector<int> s(maxn),d(maxn),ti(maxn),tin(maxn),tout(maxn);
int yy = 0;
int uu = 0;
void dfs(int i,set<pair<int,int>> &kd){
    ti[i] = yy++;
    if(kd.empty()) return;
    int u = (*kd.rbegin()).second;
    kd.erase(*kd.rbegin());
    for(int j : g[u]){
        kd.insert({s[j],j});
    }
    dfs(u, kd);
}
vector<int> pr(maxn);
void dfs2(int i,int p = -1){
    tin[i] = uu++;
    pr[i] = p;
    for(int j : g[i]){
        dfs2(j,i);
    }
    tout[i] = uu;
}
bool isp(int a,int b){
    return tin[a] <= tin[b] && tout[b] <= tout[a];
}
int dfs1(int i,int x){
    int cnt = 0;
    if(ti[i] < x) cnt = 1;
    else return 0;
    for(int j : g[i]){
        cnt+=dfs1(j,x);
    }
    return cnt;
}
int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie();
    int n, q;
    cin >> n >> q;
    for (int i = 0; i < n - 1; ++i) {
        int p;
        cin >> p;
        p--;
        g[p].push_back(i + 1);
    }
    for(int i = 0; i < n; ++i){
        cin >> s[i];
    }

    vector<array<int,3>> v(n);
    set<pair<int,int>> kd;
    dfs2(0);
    for(int j : g[0]) kd.insert({s[j],j});
    dfs(0,kd);
    for(int i = 0; i < n; ++i) v[i] = {ti[i],i,0};
    //for(int i = 0; i < n; ++i) cout << ti[i] << ' ';
    for(int i =1; i <= q; ++i) {
        int x;
        cin >> x;
        x--;
        v[x][2] = i;
    }
    vector<int> ans(q);
    sort(v.begin(),v.end());
    set<pair<int,int>> pq;
    vector<int> sz(n);
    for(int i = 0; i < n; ++i) pq.insert({0,i});
    for(int i = 0; i < n; ++i){
        if(v[i][2]){
            auto it = pq.rbegin();
            int cn = 0;
            while(cn < (int)pq.size() && isp((*(it)).second,v[i][1])){
                it++;
                cn++;
            }
            if(cn < (int)pq.size() && !isp(it->second,v[i][1])) ans[v[i][2] - 1] = ti[v[i][1]] - it->first;
            else ans[v[i][2] - 1] = ti[v[i][1]];
        }
        int j = v[i][1];
        while(j!=-1){
            sz[j]++;
            pq.insert({sz[j],j});
            j = pr[j];
        }
    }
    for(int i : ans) cout << i << ' ';
    return 0;
}
