#include <bits/stdc++.h>
const int MAXN = 300000;
int n, m, q;
std::pair<int, int> front[(MAXN << 1) + 10];
int orderx[(MAXN << 1) + 10], stdx[MAXN + 10];
void sortx() {
  static int num[MAXN + 10];
  memset(num, 0, sizeof(num));
  for (int i = 1; i <= m; i++) num[front[i].first]++;
  for (int i = 1; i <= n; i++) stdx[i] = num[i] += num[i - 1];
  for (int i = 1; i <= m; i++) orderx[++num[front[i].first - 1]] = i;
  return;
}
int sz[MAXN + 10], maxs[MAXN + 10];
struct Heap {
  bool flag;
  int fa[MAXN + 10];
  int ch[MAXN + 10][2];
  int q[MAXN + 10];
  bool up(int l, int r) {
    if (flag)
      return q[l] > q[r];
    else
      return q[l] < q[r];
  }
  int merge(int l, int r) {
    if (!l || !r) return l + r;
    if (up(l, r)) {
      ch[l][1] = merge(ch[l][1], r);
      fa[ch[l][1]] = l;
      std::swap(ch[l][0], ch[l][1]);
      return l;
    } else {
      ch[r][1] = merge(l, ch[r][1]);
      fa[ch[r][1]] = r;
      std::swap(ch[r][0], ch[r][1]);
      return r;
    }
  }
  int del(int id) {
    if (fa[id]) {
      int l = (ch[fa[id]][1] == id);
      ch[fa[id]][l] = merge(ch[id][0], ch[id][1]);
      fa[ch[fa[id]][l]] = fa[id];
      fa[id] = ch[id][0] = ch[id][1] = 0;
      return id;
    } else {
      int rt = merge(ch[id][0], ch[id][1]);
      fa[rt] = 0;
      fa[id] = ch[id][0] = ch[id][1] = 0;
      return rt;
    }
  }
} sz_max, SZ, MAX;
int sz_maxrt[MAXN + 10], SZrt[MAXN + 10], MAXrt[MAXN + 10];
int ans[MAXN + 10];
void dfs2(int first) {
  sz_maxrt[first] = MAXrt[first] = first;
  SZrt[first] = 0;
  sz_max.q[first] = sz[first] + maxs[first];
  SZ.q[first] = sz[first];
  MAX.q[first] = maxs[first];
  for (int i = stdx[first - 1] + 1; i <= stdx[first]; i++) {
    int next = front[orderx[i]].second;
    dfs2(next);
    sz_maxrt[first] = sz_max.merge(sz_maxrt[first], sz_maxrt[next]);
    SZrt[first] = SZ.merge(SZrt[first], SZrt[next]);
    MAXrt[first] = MAX.merge(MAXrt[first], MAXrt[next]);
  }
  while (sz_max.q[sz_maxrt[first]] < sz[first]) {
    if (sz_maxrt[first] == MAXrt[first])
      MAXrt[first] = MAX.del(MAXrt[first]);
    else
      MAX.del(sz_maxrt[first]);
    SZrt[first] = SZ.merge(SZrt[first], sz_maxrt[first]);
    sz_maxrt[first] = sz_max.del(sz_maxrt[first]);
  }
  if (sz[first] - sz[SZrt[first]] > maxs[MAXrt[first]])
    ans[first] = MAXrt[first];
  else
    ans[first] = SZrt[first];
  return;
}
void dfs(int first) {
  sz[first] = 1;
  maxs[first] = 0;
  for (int i = stdx[first - 1] + 1; i <= stdx[first]; i++) {
    int next = front[orderx[i]].second;
    dfs(next);
    sz[first] += sz[next];
    maxs[first] = ((maxs[first]) > (sz[next]) ? (maxs[first]) : (sz[next]));
  }
  return;
}
void init() {
  std::cin >> n >> q;
  for (int i = 2; i <= n; i++) {
    int fa;
    scanf("%d", &fa);
    front[++m] = std::make_pair(fa, i);
  }
  SZ.flag = true;
  sortx();
  dfs(1);
  dfs2(1);
  for (int i = 1; i <= q; i++) {
    int first;
    scanf("%d", &first);
    printf("%d\n", ans[first]);
  }
  return;
}
int main() {
  init();
  return 0;
}
