#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;

vector<vector<int>> g;
vector<int> s;
vector<bool> block;

int cnt = 0;

bool dfs(int v, int p, int nado) {

  bool is = (v == nado);
  for(int &u : g[v]) {
    if(u != p) is |= dfs(u, v, nado);
  }

  cnt += is;
  return is;
}

// bool dfs1(int v, int p, int nado) {
//   block[v] = nado;
//   if(v == nado) return 1;

//   for(int &u : g[v]) {
//     if(u == p) continue;
//     block[v] = block[v] || dfs1(u, v, nado);
//   }

//   return block[v];
// }

// void dfs2(int v, int p, int nado, bool is) {
//   if(v == nado) is = 1;
//   block[v] = is;

//   for(int &u : g[v]) {
//     if(u == p) continue;
//     dfs2(u, v, nado, is);
//   }
// }

// void dfs3(int v, int p, int lvl) {
//   sub[v] = (s[v] > lvl);
//   if(!sub[v]) return;

//   for(int &u : g[v]) {
//     if(v == p) continue;
//     dfs3(u, v, lvl);
//     sub[v] += sub[u];
//   }
// }


void solve() {

  int n, q; cin >> n >> q;
  g.resize(n); s.resize(n);
  for(int i = 1; i < n; ++i) {
    int v; cin >> v, --v;
    g[i].push_back(v);
    g[v].push_back(i);
  }
  for(int &i : s) cin >> i;

  while(q--) {
    int v; cin >> v, --v;
    cnt = 0; dfs(0,0,v);
    cout << cnt-1 << '\n';
  }

  

  return;
}


signed main() {
  ios_base::sync_with_stdio(0); cin.tie(0);
#ifdef pcms2
  freopen(".in", "r", stdin);
  freopen(".out", "w", stdout);
#endif
  // int tt; cin >> tt; while(tt--)
  solve();

  return 0;
}