#include <bits/stdc++.h>
#define MAXN 200000
using namespace std;
typedef long long LL;
vector<int> Grafo[MAXN];
int t, p[MAXN], depth[MAXN], discover[MAXN], inn[MAXN], outt[MAXN], subtree[MAXN];
void dfs(int nodo = 0, int padre = -1, int dept = 0){
p[nodo] = padre;
depth[nodo] = dept;
discover[t] = nodo;
inn[nodo] = t++;
subtree[nodo] = 1;
for(auto x : Grafo[nodo]) dfs(x, nodo, dept+1), subtree[nodo] += subtree[x];
outt[nodo] = t-1;
}
int catena, Head[MAXN], last[MAXN], indchain[MAXN], chainsize[MAXN], chainpos[MAXN];
void HLD(int nodo = 0){
if(Head[catena] == -1)
Head[catena] = nodo;
indchain[nodo] = catena;
chainpos[nodo] = chainsize[catena];
chainsize[catena]++;
int Max = -1, ind = -1;
for(auto x : Grafo[nodo])
if(subtree[x] > Max)
Max = subtree[x], ind = x;
if(ind != -1)
HLD(ind);
else
last[catena] = nodo;
for(auto x : Grafo[nodo])
if(x != ind){
catena++;
HLD(x);
}
}
LL res[MAXN];
LL calculate(int nodo, LL k){
if(k == 0) return 0;
LL sum = 0;
for(auto x : Grafo[nodo])
if(indchain[x] != indchain[nodo])
sum += calculate(x, k-1)+k;
LL livelli = depth[last[indchain[nodo]]]-depth[nodo];
sum += -livelli*(livelli-1)/2 + livelli*k;
return sum;
}
void calcola_disagio(int N, int Q, int P[], int K[], int u[], int v[], long long risposta[]){
for(int i = 2; i <= N; i++)
Grafo[P[i]-1].push_back(i-1);
dfs(); HLD();
for(int i = 0; i < N; i++)
res[i] = calculate(i, K[i+1]);
for(int i = 0, r = 0; i < Q; ++i){
if(v[i] == -1){
u[i]--;
risposta[r++] = res[u[i]];
}
else{
u[i]--; v[i]--;
int pu = p[u[i]];
auto it = find(Grafo[pu].begin(), Grafo[pu].end(), u[i]);
Grafo[pu].erase(it);
Grafo[v[i]].push_back(u[i]);
p[u[i]] = v[i];
int attuale = pu;
int dep = depth[u[i]];
depth[u[i]] = depth[v[i]]+1;
while(attuale != -1){
if((dep-depth[attuale]-1) < K[attuale+1])
res[attuale] -= K[attuale+1]-(dep-depth[attuale]-1);
attuale = p[attuale];
}
attuale = v[i];
dep = depth[u[i]];
while(attuale != -1){
if((dep-depth[attuale]-1) < K[attuale+1])
res[attuale] += K[attuale+1]-(dep-depth[attuale]-1);
attuale = p[attuale];
}
}
}
}
main(){
int N, Q; cin >> N >> Q;
int P[N+1], K[N+1], u[Q], v[Q];
for(int i = 1; i <= N; i++) cin >> P[i];
for(int i = 1; i <= N; i++) cin >> K[i];
int R = 0;
for(int i = 0; i < Q; i++){
cin >> u[i] >> v[i];
if(v[i] == -1)
R++;
}
long long risposta[R];
calcola_disagio(N, Q, P, K, u, v, risposta);
for(int i = 0; i < R; i++)
cout << risposta[i] << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgTUFYTiAyMDAwMDAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgTEw7CnZlY3RvcjxpbnQ+IEdyYWZvW01BWE5dOwppbnQgdCwgcFtNQVhOXSwgZGVwdGhbTUFYTl0sIGRpc2NvdmVyW01BWE5dLCBpbm5bTUFYTl0sIG91dHRbTUFYTl0sIHN1YnRyZWVbTUFYTl07CnZvaWQgZGZzKGludCBub2RvID0gMCwgaW50IHBhZHJlID0gLTEsIGludCBkZXB0ID0gMCl7CiAgICBwW25vZG9dID0gcGFkcmU7CiAgICBkZXB0aFtub2RvXSA9IGRlcHQ7CiAgICBkaXNjb3Zlclt0XSA9IG5vZG87CiAgICBpbm5bbm9kb10gPSB0Kys7CiAgICBzdWJ0cmVlW25vZG9dID0gMTsKICAgIGZvcihhdXRvIHggOiBHcmFmb1tub2RvXSkgZGZzKHgsIG5vZG8sIGRlcHQrMSksIHN1YnRyZWVbbm9kb10gKz0gc3VidHJlZVt4XTsKICAgIG91dHRbbm9kb10gPSB0LTE7Cn0KaW50IGNhdGVuYSwgSGVhZFtNQVhOXSwgbGFzdFtNQVhOXSwgaW5kY2hhaW5bTUFYTl0sIGNoYWluc2l6ZVtNQVhOXSwgY2hhaW5wb3NbTUFYTl07CnZvaWQgSExEKGludCBub2RvID0gMCl7CiAgICBpZihIZWFkW2NhdGVuYV0gPT0gLTEpCiAgICAgICAgSGVhZFtjYXRlbmFdID0gbm9kbzsKICAgIGluZGNoYWluW25vZG9dID0gY2F0ZW5hOwogICAgY2hhaW5wb3Nbbm9kb10gPSBjaGFpbnNpemVbY2F0ZW5hXTsKICAgIGNoYWluc2l6ZVtjYXRlbmFdKys7CiAgICBpbnQgTWF4ID0gLTEsIGluZCA9IC0xOwogICAgZm9yKGF1dG8geCA6IEdyYWZvW25vZG9dKQogICAgICAgIGlmKHN1YnRyZWVbeF0gPiBNYXgpCiAgICAgICAgICAgIE1heCA9IHN1YnRyZWVbeF0sIGluZCA9IHg7CiAgICBpZihpbmQgIT0gLTEpCiAgICAgICAgSExEKGluZCk7CiAgICBlbHNlCiAgICAgICAgbGFzdFtjYXRlbmFdID0gbm9kbzsKICAgIGZvcihhdXRvIHggOiBHcmFmb1tub2RvXSkKICAgICAgICBpZih4ICE9IGluZCl7CiAgICAgICAgICAgIGNhdGVuYSsrOwogICAgICAgICAgICBITEQoeCk7CiAgICAgICAgfQp9CkxMIHJlc1tNQVhOXTsKTEwgY2FsY3VsYXRlKGludCBub2RvLCBMTCBrKXsKICAgIGlmKGsgPT0gMCkgcmV0dXJuIDA7CiAgICBMTCBzdW0gPSAwOwogICAgZm9yKGF1dG8geCA6IEdyYWZvW25vZG9dKQogICAgICAgIGlmKGluZGNoYWluW3hdICE9IGluZGNoYWluW25vZG9dKQogICAgICAgICAgICBzdW0gKz0gY2FsY3VsYXRlKHgsIGstMSkrazsKICAgIExMIGxpdmVsbGkgPSBkZXB0aFtsYXN0W2luZGNoYWluW25vZG9dXV0tZGVwdGhbbm9kb107CiAgICBzdW0gKz0gLWxpdmVsbGkqKGxpdmVsbGktMSkvMiArIGxpdmVsbGkqazsKICAgIHJldHVybiBzdW07Cn0KCnZvaWQgY2FsY29sYV9kaXNhZ2lvKGludCBOLCBpbnQgUSwgaW50IFBbXSwgaW50IEtbXSwgaW50IHVbXSwgaW50IHZbXSwgbG9uZyBsb25nIHJpc3Bvc3RhW10pewoJZm9yKGludCBpID0gMjsgaSA8PSBOOyBpKyspCiAgICAgICAgR3JhZm9bUFtpXS0xXS5wdXNoX2JhY2soaS0xKTsKICAgIGRmcygpOyBITEQoKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBOOyBpKyspCiAgICAgICAgcmVzW2ldID0gY2FsY3VsYXRlKGksIEtbaSsxXSk7CiAgICBmb3IoaW50IGkgPSAwLCByID0gMDsgaSA8IFE7ICsraSl7CgkJaWYodltpXSA9PSAtMSl7CiAgICAgICAgICAgIHVbaV0tLTsKICAgICAgICAgICAgcmlzcG9zdGFbcisrXSA9IHJlc1t1W2ldXTsKCQl9CgkJZWxzZXsKICAgICAgICAgICAgdVtpXS0tOyB2W2ldLS07CiAgICAgICAgICAgIGludCBwdSA9IHBbdVtpXV07CiAgICAgICAgICAgIGF1dG8gaXQgPSBmaW5kKEdyYWZvW3B1XS5iZWdpbigpLCBHcmFmb1twdV0uZW5kKCksIHVbaV0pOwogICAgICAgICAgICBHcmFmb1twdV0uZXJhc2UoaXQpOwogICAgICAgICAgICBHcmFmb1t2W2ldXS5wdXNoX2JhY2sodVtpXSk7CiAgICAgICAgICAgIHBbdVtpXV0gPSB2W2ldOwogICAgICAgICAgICBpbnQgYXR0dWFsZSA9IHB1OwogICAgICAgICAgICBpbnQgZGVwID0gZGVwdGhbdVtpXV07CiAgICAgICAgICAgIGRlcHRoW3VbaV1dID0gZGVwdGhbdltpXV0rMTsKICAgICAgICAgICAgd2hpbGUoYXR0dWFsZSAhPSAtMSl7CiAgICAgICAgICAgICAgICBpZigoZGVwLWRlcHRoW2F0dHVhbGVdLTEpIDwgS1thdHR1YWxlKzFdKQogICAgICAgICAgICAgICAgICAgIHJlc1thdHR1YWxlXSAtPSBLW2F0dHVhbGUrMV0tKGRlcC1kZXB0aFthdHR1YWxlXS0xKTsKICAgICAgICAgICAgICAgIGF0dHVhbGUgPSBwW2F0dHVhbGVdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF0dHVhbGUgPSB2W2ldOwogICAgICAgICAgICBkZXAgPSBkZXB0aFt1W2ldXTsKICAgICAgICAgICAgd2hpbGUoYXR0dWFsZSAhPSAtMSl7CiAgICAgICAgICAgICAgICBpZigoZGVwLWRlcHRoW2F0dHVhbGVdLTEpIDwgS1thdHR1YWxlKzFdKQogICAgICAgICAgICAgICAgICAgIHJlc1thdHR1YWxlXSArPSBLW2F0dHVhbGUrMV0tKGRlcC1kZXB0aFthdHR1YWxlXS0xKTsKICAgICAgICAgICAgICAgIGF0dHVhbGUgPSBwW2F0dHVhbGVdOwogICAgICAgICAgICB9CgkJfQogICAgfQp9CgoKCgptYWluKCl7CglpbnQgTiwgUTsgY2luID4+IE4gPj4gUTsKCWludCBQW04rMV0sIEtbTisxXSwgdVtRXSwgdltRXTsKCWZvcihpbnQgaSA9IDE7IGkgPD0gTjsgaSsrKSBjaW4gPj4gUFtpXTsKCWZvcihpbnQgaSA9IDE7IGkgPD0gTjsgaSsrKSBjaW4gPj4gS1tpXTsKCWludCBSID0gMDsKCWZvcihpbnQgaSA9IDA7IGkgPCBROyBpKyspewogICAgICAgIGNpbiA+PiB1W2ldID4+IHZbaV07CiAgICAgICAgaWYodltpXSA9PSAtMSkKICAgICAgICAgICAgUisrOwoJfQoJbG9uZyBsb25nIHJpc3Bvc3RhW1JdOwoJY2FsY29sYV9kaXNhZ2lvKE4sIFEsIFAsIEssIHUsIHYsIHJpc3Bvc3RhKTsKCWZvcihpbnQgaSA9IDA7IGkgPCBSOyBpKyspCiAgICAgICAgY291dCA8PCByaXNwb3N0YVtpXSA8PCBlbmRsOwp9Cg==