#include<cstdio>
#include<cstring>
using namespace std;
#define FOR(i,x,y) for(int i=(x);i<=(y);i++)
#define DOR(i,x,y) for(int i=(x);i>=(y);i--)
#define M 200005
#define N 100005
struct node{
	char op[3];
	int x;
}Q[M];
bool mark[N];
int Fa[N],fa[N],ans[M];
int find(int x){return x==Fa[x]?x:Fa[x]=find(Fa[x]);}

int main(){
	int n,q;
	fa[1]=1;
	while(~scanf("%d%d",&n,&q)&&(n||q)){
		memset(mark,0,sizeof mark);
		FOR(i,2,n)scanf("%d",&fa[i]);
		FOR(i,1,n)Fa[i]=i;
		FOR(i,1,q){
			scanf("%s%d",Q[i].op,&Q[i].x);
			if(Q[i].op[0]=='M'){
				if(!mark[Q[i].x])mark[Q[i].x]=1;
				else Q[i].x=0;
			}
		}
		FOR(i,1,n)if(!mark[i])Q[++q].op[0]='M',Q[q].x=i;
		
		memset(mark,0,sizeof mark);
		DOR(i,q,1){
			int x=Q[i].x;
			if(Q[i].op[0]=='M'){
				if(Q[i].x!=0)Fa[x]=find(fa[Fa[x]]);	
			}
			else ans[i]=find(x);
		}
		
		long long tmp=0;
		FOR(i,1,q)if(Q[i].op[0]=='Q')tmp+=ans[i];
		printf("%lld\n",tmp);
	}
	return 0;
}
