#include <bits/stdc++.h>
int C, p, st, en, sst, een, i, j, c, a, b, k, bac, fr;
char str[1000005], w[4];
int seg[3][1 << 19], X = 1 << 18;
std::set<int> S[3];
std::set<int>::iterator it;
int to(char cha) {
  if (cha == 'R') return 0;
  if (cha == 'P') return 1;
  return 2;
}
void update(int p, int in, int val) {
  int o = X + in;
  seg[p][o] += val;
  o /= 2;
  while (o) {
    seg[p][o] = seg[p][2 * o] + seg[p][2 * o + 1];
    o /= 2;
  }
}
int sum(int p, int num, int s, int e, int l, int r) {
  if (l > r) return 0;
  if (l <= s && e <= r) return seg[p][num];
  if (l > e || s > r) return 0;
  return sum(p, num * 2, s, (s + e) / 2, l, r) +
         sum(p, num * 2 + 1, (s + e) / 2 + 1, e, l, r);
}
int f() {
  int ans = 0;
  for (i = 0; i < 3; i++) {
    j = (i + 2) % 3;
    k = (i + 1) % 3;
    if (S[j].size() == 0) {
      if (S[k].size() == 0) ans += S[i].size();
    } else {
      it = S[j].begin();
      st = *it;
      it = S[j].end();
      it--;
      en = *it;
      ans += sum(i, 1, 0, X - 1, st, en);
      if (S[k].size() == 0)
        ans += st + (a - 1 - en);
      else {
        it = S[k].begin();
        sst = *it;
        it = S[k].end();
        it--;
        een = *it;
        ans += (std::min(st, sst) + (a - 1 - std::max(en, een)));
      }
    }
  }
  return ans;
}
int main() {
  int T;
  scanf("%d%d", &a, &T);
  scanf("%s", str);
  for (i = 0; i < a; i++) {
    S[to(str[i])].insert(i);
    update(to(str[i]), i, 1);
  }
  printf("%d\n", f());
  while (T--) {
    scanf("%d%s", &b, w);
    b--;
    C = to(w[0]);
    for (i = 0; i < 3; i++) {
      if (S[i].find(b) != S[i].end()) {
        S[i].erase(b);
        update(i, b, -1);
        break;
      }
    }
    S[C].insert(b);
    update(C, b, 1);
    printf("%d\n", f());
  }
}
