#include <bits/stdc++.h>
using namespace std;
const int B = 355;
const int N = 200005;
vector<int> e[N];
int n, Q, fa[N], lim[N], qv[N];
int dfn[N], ed[N], dep[N], top[N], sz[N];
int q[N], qq[N], vis[N], f[N];
int id[N], Fa[N], stk[N];
int g[1005][1005], pos[1005];
void dfs(int x) {
  sz[x] = 1;
  dep[x] = max(dep[x], 1);
  for (auto i : e[x]) {
    dep[i] = dep[x] + 1;
    dfs(i);
    sz[x] += sz[i];
  }
}
void dfs(int x, int tp) {
  dfn[x] = ++*dfn;
  top[x] = tp;
  int k = 0;
  for (auto i : e[x])
    if (sz[i] > sz[k]) k = i;
  if (k) dfs(k, tp);
  for (auto i : e[x])
    if (i != k) dfs(i, i);
  ed[x] = *dfn;
}
int LCA(int x, int y) {
  for (; top[x] != top[y]; x = fa[top[x]])
    if (dep[top[x]] < dep[top[y]]) swap(x, y);
  return dep[x] < dep[y] ? x : y;
}
bool cmp(int x, int y) { return dfn[x] < dfn[y]; }
bool isfa(int x, int y) { return dfn[x] <= dfn[y] && ed[y] <= ed[x]; }
int main() {
  scanf("%d%d", &n, &Q);
  for (int i = (int)(2); i <= (int)(n); i++) scanf("%d", &fa[i]);
  for (int i = (int)(2); i <= (int)(n); i++) e[fa[i]].push_back(i);
  for (int i = (int)(1); i <= (int)(n); i++) scanf("%d", &lim[i]);
  for (int i = (int)(1); i <= (int)(Q); i++) scanf("%d", &qv[i]);
  dfs(1);
  dfs(1, 1);
  q[++*q] = 1;
  for (int i = (int)(1); i <= (int)(n); i++)
    for (auto j : e[q[i]]) q[++*q] = j;
  for (int l = 1, r = B; l <= Q; l += B, r += B) {
    int ans = 0;
    r = min(r, Q);
    for (int j = (int)(1); j <= (int)(n); j++) vis[j] = 0;
    for (int j = (int)(1); j <= (int)(l - 1); j++) vis[abs(qv[j])] ^= 1;
    for (int j = (int)(1); j <= (int)(n); j++) f[j] = (vis[j] ? 1 : 0);
    for (int j = (int)(n); j >= (int)(1); j--) f[fa[q[j]]] += f[q[j]];
    for (int j = (int)(1); j <= (int)(n); j++)
      ans += (!vis[j] && f[j] > lim[j]);
    *qq = 0;
    for (int j = (int)(l); j <= (int)(r); j++) qq[++*qq] = abs(qv[j]);
    sort(qq + 1, qq + *qq + 1, cmp);
    for (int j = (int)(1); j <= (int)((*qq) - 1); j++)
      qq[j + (*qq)] = LCA(qq[j], qq[j + 1]);
    sort(qq + 1, qq + 2 * (*qq), cmp);
    *qq = unique(qq + 1, qq + 2 * *qq) - qq - 1;
    for (int j = (int)(1); j <= (int)(*qq); j++) id[qq[j]] = j;
    int top = 1;
    stk[1] = qq[1];
    Fa[qq[1]] = 0;
    for (int j = (int)(2); j <= (int)(*qq); j++) {
      for (; top && !isfa(stk[top], qq[j]); top--)
        ;
      Fa[qq[j]] = stk[top];
      stk[++top] = qq[j];
    }
    for (int j = (int)(1); j <= (int)(*qq); j++) {
      memset(g[j], 0, sizeof(g[j]));
      int x = qq[j], y = Fa[qq[j]];
      pos[j] = B;
      for (x = fa[x]; dep[x] > dep[y]; x = fa[x])
        if (!vis[x]) {
          int v = f[x] - lim[x];
          if (v >= -B && v <= B) ++g[j][v + B];
        }
    }
    for (int j = (int)(l); j <= (int)(r); j++) {
      int p = abs(qv[j]);
      int v = (qv[j] < 0 ? -1 : 1);
      for (; p; p = Fa[p]) {
        ans -= (!vis[p] && f[p] > lim[p]);
        if (p == abs(qv[j])) vis[p] ^= 1;
        f[p] += v;
        ans += (!vis[p] && f[p] > lim[p]);
        if (v == 1)
          ans += g[id[p]][pos[id[p]]--];
        else
          ans -= g[id[p]][++pos[id[p]]];
      }
      printf("%d ", ans);
    }
  }
}
