#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
vector<int> e[100005];
int src[100005],cnt;
int lhs[100005],rhs[100005];
void dfs(int x){
lhs[x]=cnt++;
for(size_t i=0;i<e[x].size();i++)
dfs(e[x][i]);
rhs[x]=cnt;
}
class SegTree{
public:
int ans[262144];
int tag[262144];
void clear(){
memset(ans,0,sizeof(ans));
memset(tag,0,sizeof(tag));
}
void modify(int l, int r, int x, int y, int i){
if(l<=x && y<=r){
tag[i]^=1;
ans[i]=y-x-ans[i];
return;
}
int m=(x+y)/2,j=i*2,k=j+1;
if(l<m) modify(l,r,x,m,j);
if(m<r) modify(l,r,m,y,k);
ans[i]=ans[j]+ans[k];
if(tag[i]) ans[i]=y-x-ans[i];
}
int getsum(int l, int r, int x, int y, int i, int v){
if(l<=x && y<=r) return v?y-x-ans[i]:ans[i];
int m=(x+y)/2,j=i*2,k=j+1,ret=0;
if(l<m) ret+=getsum(l,r,x,m,j,v^tag[i]);
if(m<r) ret+=getsum(l,r,m,y,k,v^tag[i]);
return ret;
}
}seg;
int main(){
int n,m,x;
while(scanf("%d%d",&n,&m)==2){
cnt=0;
seg.clear();
for(int i=2;i<=n;i++){
scanf("%d",src+i);
e[src[i]].push_back(i);
}
dfs(1);
for(int i=1;i<=n;i++) e[i].clear();
for(int i=1;i<=m;i++){
char s[10];
scanf("%s%d",s,&x);
if(*s=='o'){
seg.modify(lhs[x],rhs[x],0,n,1);
}else{
int ret=seg.getsum(lhs[x],rhs[x],0,n,1,0);
printf("%d\n",ret);
}
}
puts("");
}
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBlWzEwMDAwNV07CmludCBzcmNbMTAwMDA1XSxjbnQ7CmludCBsaHNbMTAwMDA1XSxyaHNbMTAwMDA1XTsKCnZvaWQgZGZzKGludCB4KXsKICAgIGxoc1t4XT1jbnQrKzsKICAgIGZvcihzaXplX3QgaT0wO2k8ZVt4XS5zaXplKCk7aSsrKQogICAgICAgIGRmcyhlW3hdW2ldKTsKICAgIHJoc1t4XT1jbnQ7Cn0KCmNsYXNzIFNlZ1RyZWV7CnB1YmxpYzoKICAgIGludCBhbnNbMjYyMTQ0XTsKICAgIGludCB0YWdbMjYyMTQ0XTsKICAgIHZvaWQgY2xlYXIoKXsKICAgICAgICBtZW1zZXQoYW5zLDAsc2l6ZW9mKGFucykpOwogICAgICAgIG1lbXNldCh0YWcsMCxzaXplb2YodGFnKSk7CiAgICB9CiAgICB2b2lkIG1vZGlmeShpbnQgbCwgaW50IHIsIGludCB4LCBpbnQgeSwgaW50IGkpewogICAgICAgIGlmKGw8PXggJiYgeTw9cil7CiAgICAgICAgICAgIHRhZ1tpXV49MTsKICAgICAgICAgICAgYW5zW2ldPXkteC1hbnNbaV07CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaW50IG09KHgreSkvMixqPWkqMixrPWorMTsKICAgICAgICBpZihsPG0pIG1vZGlmeShsLHIseCxtLGopOwogICAgICAgIGlmKG08cikgbW9kaWZ5KGwscixtLHksayk7CiAgICAgICAgYW5zW2ldPWFuc1tqXSthbnNba107CiAgICAgICAgaWYodGFnW2ldKSBhbnNbaV09eS14LWFuc1tpXTsKICAgIH0KICAgIGludCBnZXRzdW0oaW50IGwsIGludCByLCBpbnQgeCwgaW50IHksIGludCBpLCBpbnQgdil7CiAgICAgICAgaWYobDw9eCAmJiB5PD1yKSByZXR1cm4gdj95LXgtYW5zW2ldOmFuc1tpXTsKICAgICAgICBpbnQgbT0oeCt5KS8yLGo9aSoyLGs9aisxLHJldD0wOwogICAgICAgIGlmKGw8bSkgcmV0Kz1nZXRzdW0obCxyLHgsbSxqLHZedGFnW2ldKTsKICAgICAgICBpZihtPHIpIHJldCs9Z2V0c3VtKGwscixtLHksayx2XnRhZ1tpXSk7CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KfXNlZzsKCmludCBtYWluKCl7CiAgICBpbnQgbixtLHg7CiAgICB3aGlsZShzY2FuZigiJWQlZCIsJm4sJm0pPT0yKXsKICAgICAgICBjbnQ9MDsKICAgICAgICBzZWcuY2xlYXIoKTsKICAgICAgICBmb3IoaW50IGk9MjtpPD1uO2krKyl7CiAgICAgICAgICAgIHNjYW5mKCIlZCIsc3JjK2kpOwogICAgICAgICAgICBlW3NyY1tpXV0ucHVzaF9iYWNrKGkpOwogICAgICAgIH0KICAgICAgICBkZnMoMSk7CiAgICAgICAgZm9yKGludCBpPTE7aTw9bjtpKyspIGVbaV0uY2xlYXIoKTsKICAgICAgICBmb3IoaW50IGk9MTtpPD1tO2krKyl7CiAgICAgICAgICAgIGNoYXIgc1sxMF07CiAgICAgICAgICAgIHNjYW5mKCIlcyVkIixzLCZ4KTsKICAgICAgICAgICAgaWYoKnM9PSdvJyl7CiAgICAgICAgICAgICAgICBzZWcubW9kaWZ5KGxoc1t4XSxyaHNbeF0sMCxuLDEpOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIGludCByZXQ9c2VnLmdldHN1bShsaHNbeF0scmhzW3hdLDAsbiwxLDApOwogICAgICAgICAgICAgICAgcHJpbnRmKCIlZFxuIixyZXQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHB1dHMoIiIpOwogICAgfQp9Cg==