#include <bits/stdc++.h>
#define debug cout << "ok\n";
#define SQR(x) (1LL * ((x) * (x)))
#define MASK(i) (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define pli pair<ll,int>
#define vi vector<int>
#define FAST ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned int ui;
using namespace std;
const int M = 1e9 + 7;
const int INF = 1e9 + 7;
const ll INFLL = (ll)2e18 + 7LL;
const ld PI = acos(-1);
const int dx[] = {1, -1, 0, 0, -1, 1, 1, -1};
const int dy[] = {0, 0, 1, -1, -1, -1, 1, 1};
template<class _, class __>
bool minimize(_ &x, const __ y){
if(x > y){
x = y;
return true;
} else return false;
}
template<class _, class __>
bool maximize(_ &x, const __ y){
if(x < y){
x = y;
return true;
} else return false;
}
template<class _,class __>
void Add(_ &x, const __ y) {
x += y;
if (x >= M) {
x -= M;
}
return;
}
template<class _,class __>
void Diff(_ &x, const __ y) {
x -= y;
if (x < 0) {
x += M;
}
return;
}
//--------------------------------------------------------------
const int MaxN = 2e5+7;
int n,q,a[MaxN],p[MaxN],sz[MaxN],res[MaxN];
vi adj[MaxN];
multiset<int> f[MaxN];
void dfs1(int u) {
sz[u] = 1;
for (int v : adj[u]) {
dfs1(v);
sz[v] += sz[u];
}
}
void dfs(int u) {
int nxt = 0;
for (int v : adj[u]) {
if (sz[v] > sz[nxt]) nxt = v;
}
if (nxt != 0) {
dfs(nxt);
swap(f[u],f[nxt]);
}
for (int v : adj[u]) {
if (v == nxt) continue;
dfs(v);
for (multiset<int>::iterator it = f[v].begin();it!=f[v].end();it++) {
f[u].insert(*it);
}
f[v].clear();
}
multiset<int>::iterator it = f[u].lower_bound(a[u]);
if (it == f[u].end()) {
f[u].insert(a[u]);
}
else {
multiset<int>::iterator it1 = f[u].upper_bound(a[u]);
if (it1 == it) {
f[u].erase(it);
f[u].insert(a[u]);
}
}
res[u] = f[u].size();
}
void sol() {
cin >> n >> q;
for (int i=1;i<=n;i++) cin >> a[i];
for (int i=2;i<=n;i++) {
cin >> p[i];
adj[p[i]].pb(i);
}
dfs1(1);
dfs(1);
for (int i=1;i<=q;i++) {
int u;
cin >> u;
cout << res[u] << '\n';
}
}
int main() {
// freopen("test.inp","r",stdin);
// freopen("test.out","w",stdout);
FAST
int t=1;
// cin >> t;
while (t--) sol();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGRlYnVnICAgICBjb3V0IDw8ICJva1xuIjsKI2RlZmluZSBTUVIoeCkgICAgKDFMTCAqICgoeCkgKiAoeCkpKQojZGVmaW5lIE1BU0soaSkgICAoMUxMIDw8IChpKSkKI2RlZmluZSBCSVQoeCwgaSkgKCgoeCkgPj4gKGkpKSAmIDEpCiNkZWZpbmUgZmkgICAgICAgIGZpcnN0CiNkZWZpbmUgc2UgICAgICAgIHNlY29uZAojZGVmaW5lIHBiICAgICAgICBwdXNoX2JhY2sKCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBwbGkgcGFpcjxsbCxpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1aTsKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTSA9IDFlOSArIDc7CmNvbnN0IGludCBJTkYgPSAxZTkgKyA3Owpjb25zdCBsbCBJTkZMTCA9IChsbCkyZTE4ICsgN0xMOwpjb25zdCBsZCBQSSA9IGFjb3MoLTEpOwoKY29uc3QgaW50IGR4W10gPSB7MSwgLTEsIDAsIDAsIC0xLCAxLCAxLCAtMX07CmNvbnN0IGludCBkeVtdID0gezAsIDAsIDEsIC0xLCAtMSwgLTEsIDEsIDF9OwoKdGVtcGxhdGU8Y2xhc3MgXywgY2xhc3MgX18+CiAgICBib29sIG1pbmltaXplKF8gJngsIGNvbnN0IF9fIHkpewogICAgICAgIGlmKHggPiB5KXsKICAgICAgICAgICAgeCA9IHk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICB9CnRlbXBsYXRlPGNsYXNzIF8sIGNsYXNzIF9fPgogICAgYm9vbCBtYXhpbWl6ZShfICZ4LCBjb25zdCBfXyB5KXsKICAgICAgICBpZih4IDwgeSl7CiAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgcmV0dXJuIGZhbHNlOwogICAgfQoKdGVtcGxhdGU8Y2xhc3MgXyxjbGFzcyBfXz4KICAgIHZvaWQgQWRkKF8gJngsIGNvbnN0IF9fIHkpIHsKICAgICAgICB4ICs9IHk7CiAgICAgICAgaWYgKHggPj0gTSkgewogICAgICAgICAgICB4IC09IE07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIF8sY2xhc3MgX18+CiAgICB2b2lkIERpZmYoXyAmeCwgY29uc3QgX18geSkgewogICAgICAgIHggLT0geTsKICAgICAgICBpZiAoeCA8IDApIHsKICAgICAgICAgICAgeCArPSBNOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjb25zdCBpbnQgTWF4TiA9IDJlNSs3OwoKaW50IG4scSxhW01heE5dLHBbTWF4Tl0sc3pbTWF4Tl0scmVzW01heE5dOwp2aSBhZGpbTWF4Tl07Cm11bHRpc2V0PGludD4gZltNYXhOXTsKCnZvaWQgZGZzMShpbnQgdSkgewogICAgc3pbdV0gPSAxOwogICAgZm9yIChpbnQgdiA6IGFkalt1XSkgewogICAgICAgIGRmczEodik7CiAgICAgICAgc3pbdl0gKz0gc3pbdV07CiAgICB9Cn0KCnZvaWQgZGZzKGludCB1KSB7CiAgICBpbnQgbnh0ID0gMDsKICAgIGZvciAoaW50IHYgOiBhZGpbdV0pIHsKICAgICAgICBpZiAoc3pbdl0gPiBzeltueHRdKSBueHQgPSB2OwogICAgfQogICAgaWYgKG54dCAhPSAwKSB7CiAgICAgICAgZGZzKG54dCk7CiAgICAgICAgc3dhcChmW3VdLGZbbnh0XSk7CiAgICB9CiAgICBmb3IgKGludCB2IDogYWRqW3VdKSB7CiAgICAgICAgaWYgKHYgPT0gbnh0KSBjb250aW51ZTsKICAgICAgICBkZnModik7CiAgICAgICAgZm9yIChtdWx0aXNldDxpbnQ+OjppdGVyYXRvciBpdCA9IGZbdl0uYmVnaW4oKTtpdCE9Zlt2XS5lbmQoKTtpdCsrKSB7CiAgICAgICAgICAgIGZbdV0uaW5zZXJ0KCppdCk7CiAgICAgICAgfQogICAgICAgIGZbdl0uY2xlYXIoKTsKICAgIH0KICAgIG11bHRpc2V0PGludD46Oml0ZXJhdG9yIGl0ID0gZlt1XS5sb3dlcl9ib3VuZChhW3VdKTsKICAgIGlmIChpdCA9PSBmW3VdLmVuZCgpKSB7CiAgICAgICAgZlt1XS5pbnNlcnQoYVt1XSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBtdWx0aXNldDxpbnQ+OjppdGVyYXRvciBpdDEgPSBmW3VdLnVwcGVyX2JvdW5kKGFbdV0pOwogICAgICAgIGlmIChpdDEgPT0gaXQpIHsKICAgICAgICAgICAgZlt1XS5lcmFzZShpdCk7CiAgICAgICAgICAgIGZbdV0uaW5zZXJ0KGFbdV0pOwogICAgICAgIH0KICAgIH0KICAgIHJlc1t1XSA9IGZbdV0uc2l6ZSgpOwp9Cgp2b2lkIHNvbCgpIHsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IgKGludCBpPTE7aTw9bjtpKyspIGNpbiA+PiBhW2ldOwogICAgZm9yIChpbnQgaT0yO2k8PW47aSsrKSB7CiAgICAgICAgY2luID4+IHBbaV07CiAgICAgICAgYWRqW3BbaV1dLnBiKGkpOwogICAgfQogICAgZGZzMSgxKTsKICAgIGRmcygxKTsKICAgIGZvciAoaW50IGk9MTtpPD1xO2krKykgewogICAgICAgIGludCB1OwogICAgICAgIGNpbiA+PiB1OwogICAgICAgIGNvdXQgPDwgcmVzW3VdIDw8ICdcbic7CiAgICB9Cn0KCmludCBtYWluKCkgewovLwlmcmVvcGVuKCJ0ZXN0LmlucCIsInIiLHN0ZGluKTsKLy8JZnJlb3BlbigidGVzdC5vdXQiLCJ3IixzdGRvdXQpOwoJRkFTVAoJaW50IHQ9MTsKLy8JY2luID4+IHQ7Cgl3aGlsZSAodC0tKSBzb2woKTsKfQo=