#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef __int128 lll;
const ll inf = 2e18, mod = 1e9 + 7;

#define all(a) a.begin(),a.end()
#define F first
#define S second

vector<multiset<ll>>st;
vector<vector<ll>>g,stv;
vector<ll>s;

void dfs(ll v){
    st[v].insert(s[v]);
    for(auto i:g[v]){
        dfs(i);
        for(auto it:st[i])
            st[v].insert(it);
    }
    for(auto i:st[v])
        stv[v].push_back(i);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    ifstream in("C:\\work\\untitled\\input.txt");

    ll n,q;cin>>n>>q;
    g.resize(n);
    s.resize(n);
    vector<ll>p(n,-1);
    for(ll i=0;i<n-1;i++){
        ll x;cin>>x;
        x--;
        g[x].push_back(i+1);
        p[i+1]=x;
    }
    for(auto &i:s)
        cin>>i;
    stv.resize(n);
    st.resize(n);
    dfs(0);
    vector<ll>ans(n,inf);

    set<pair<ll,ll>>st2;
    st2.insert({0,0});
    ll d=-1;
    while(!st2.empty()){
        d++;
        ll v=(*st2.begin()).S;
        st2.erase(st2.begin());
        ans[v]=min(ans[v],d);
        for(auto i:g[v])
            st2.insert({-s[i],i});
    }

    while(q--){
        ll x;cin>>x;
        x--;
        ll mx=0,mn=inf,sm=0;
        ll y=x;
        while(p[x]!=-1){
            sm++;
            mn=min(mn,s[x]);
            for(auto i:g[p[x]])
                if(i!=x){
                    ll kl=stv[i].end()-lower_bound(all(stv[i]),mn);
                    mx=max(mx,kl);
                    sm+=kl;
                }
            x=p[x];
        }
        assert(sm==ans[y]);
        cout<<ans[y]-mx<<' ';
    }
}