#include <iostream>
#include <vector>
struct query{
    char type;
    int p , flag;
};
int par[100001];
void init(int n){
    par[1] = 1;
    for(int i = 2;i <= n;i++){
        std::cin >> par[i];
    }
}
int find(int x){
    if(par[x] == x){
        return x;
    }else{
        return par[x] = find(par[x]);
    }
}
void unite(int x , int y){
    par[x] = y;
}
int main(){
    int n , q;
    while(std::cin >> n >> q){
        if(n == 0 && q == 0){
            break;
        }
        init(n);

        std::vector<query> vec;
        for(int i = 0;i < q;i++){
            query q1;
            std::cin >> q1.type >> q1.p;
            if(q1.type == 'M'){
                q1.flag = par[q1.p];
                par[q1.p] = q1.p;
            }
            vec.push_back(q1);
        }

        long long int sum = 0;
        for(int i = q - 1;i >= 0;i--){
            if(vec[i].type == 'Q'){
                sum += (long long int)find(vec[i].p);
            }else{
                unite(vec[i].p , vec[i].flag);
            }
        }
        std::cout << sum << "\n";
    }
}
