#include "bits/stdc++.h"
using namespace std;

#define rep(i, n) for (int i = 0; i < (n); i ++)

bool mark[101010];
int g[101010];

int dfs(int s) {
        return mark[s] ? s : dfs(g[s]);
}

int main() {
        int n, q;
        while (cin >> n >> q && n) {
                memset(mark, 0, sizeof(mark));
                for (int i = 1; i < n; i ++) {
                        int p;
                        cin >> p;
                        p --;
                        g[i] = p;
                }
                mark[0] = true;
                long long ans = 0;
                rep(i, q) {
                        char s;
                        int v;
                        cin >> s >> v;
                        v --;
                        if (s == 'M') mark[v] = true;
                        else ans += dfs(v) + 1;
                }
                cout << ans << endl;
        }
}

//#define int long long
//
//struct query {
//        char s;
//        int node;
//};
//
//struct state {
//        int d;
//        int timing;
//        int node;
//        bool operator < (const state& r) const { return d < r.d; }
//        bool operator > (const state& r) const { return d > r.d; }
//};
//
//vector<int> depth;
//vector<vector<int> > g;
//vector<bool> used;
//vector<int> mark;
//vector<priority_queue<state>> st;
//vector<query> v;
//
//void depth_init_dfs(int s, int d) {
//        depth[s] = d;
//        for (auto v : g[s]) if (!used[v]) { 
//                used[v] = true;
//                depth_init_dfs(v, d + 1);
//        }
//}
//
//void dfs(int s) {
//        if (mark[s] != -1) {
//                priority_queue<state> tmp;
//                tmp = st[s];
//                tmp.push({depth[s], mark[s], s + 1});
//                for (auto v : g[s]) if (!used[v]) {
//                        used[v] = true;
//                        st[v] = tmp;
//                        dfs(v);
//                }
//        } else {
//                for (auto v : g[s]) if (!used[v]) {
//                        used[v] = true;
//                        st[v] = st[s];
//                        dfs(v);
//                }
//        }
//}
//
//signed main() {
//        int n, q;
//        while (true) {
//                cin >> n >> q;
//                if (n == 0 && q == 0) break;
//                cerr << n << ' ' <<  q << endl;
//                v.clear();
//                v.resize(q);
//                g.clear();
//                g.resize(n);
//                rep(i, n - 1) {
//                        int p;
//                        cin >> p;
//                        p --;
//                        g[p].push_back(i + 1);
//                }
//                rep(i, q) {
//                        cin >> v[i].s >> v[i].node;
//                        v[i].node --;
//                }
//                depth.clear();
//                depth.resize(n);
//                used.clear();
//                used.resize(n, false);
//                used[0] = true;
//                depth_init_dfs(0, 0);
//                //rep(i, n) {
//                //        cout << depth[i] << ' ' << i << endl;
//                //}
//                mark.clear();
//                mark.resize(n, -1);
//                mark[0] = 0;
//                rep(i, q) {
//                        if (v[i].s == 'M') {
//                                mark[v[i].node] = i + 1;
//                        }
//                }
//                st.clear();
//                st.resize(n);
//                used.clear();
//                used.resize(n, false);
//                st[0].push({0, 0, 1});
//                dfs(0);
//                //rep(i, n) {
//                //        state s = st[i].top();
//                //        cout << s.d << ' ' << s.timing << ' ' << s.node << endl;
//                //}
//                int ans = 0;
//                for (int i = q - 1; i >= 0; i --) {
//                        if (v[i].s == 'Q') {
//                                while (!st[v[i].node].empty()) {
//                                        if (i < st[v[i].node].top().timing < i + 1) {
//                                                ans += st[v[i].node].top().node;
//                                                break;
//                                        }
//                                        st[v[i].node].pop();
//                                }
//                        }
//                }
//                cout << ans << endl;
//        }
//        return 0;
//}

Measured memory_bytes: 3584