#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<int> &kd){
    ti[i] = yy++;
    if(kd.empty()) return;
    int u = *kd.begin();
    for(int j : kd){
        if(s[j] > s[u])u = j;
    }
    kd.erase(u);
    for(int j : g[u]){
        kd.insert(j);
    }
    dfs(u,kd);
}
void dfs2(int i){
    tin[i] = uu++;
    for(int j : g[i]){
        dfs2(j);
    }
    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;
    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<int> v(q);
    set<int> kd;
    dfs2(0);
    for(int j : g[0]) kd.insert(j);
    dfs(0,kd);
    for(int i = 0; i < n; ++i) cout << ti[i] << ' ';
    for(int i =0 ; i < q; ++i) {
        cin >> v[i];
        v[i]--;
        int mx = 0;
        for(int j = 1; j < n; ++j){
            if(isp(j,v[i])) continue;
            mx = max(mx,dfs1(j,ti[v[i]]));
        }
        cout << ti[v[i]] - mx << ' ';
    }
    return 0;
}
