/*
N?????????????????§?§???????????????¨T????????????
????????????1~N?????§???????????????????????????1??????????????????
T??????????????\??????2????????????????????????:
	
M v:?????????v??????????????????
Q v:v??????????????????????????????????\????????????????????????????

?????????????????????????????????????????????(?????????1??????)???
???????????????????????????????¨?????????????????????????

??????????????°:N<=100000
?????¨????????°:Q<=100000

?????????1???:N??¨Q
???????¬????N-1???:2~N??????????????????
?¬????Q???:?????¨???(M v or Q v)?????¢
*/

#include <cstdio>
#include <iostream>
using namespace std;

long const long N=100000;

long par[N+1];
long tree[N+1]; //??¨????§????

long find(long x){
	//printf(" x=%ld\n", x);
	if(par[x]==x) return x;
	else return find(par[x]);	
}

int main(){
	while(1){
		long n, q;
		scanf(" %ld %ld", &n, &q);
		if(n==0) break;
			
		par[1]=1;
		for(long i=2; i<=n; ++i) scanf(" %ld", &par[i]);
		
		long ans=0;
		for(long i=0; i<q; ++i){
			char req;
			long m;
			
			scanf(" %c %ld", &req, &m);
			if(req=='M') par[m]=m; //????????§????????¢?????????????????????
			else if(req=='Q') ans+=find(m);
			//printf("%ld\n", ans);
		}
			
		printf("%ld\n", ans);
	}
}