#include <bits/stdc++.h>
using namespace std;
inline int getid(char c) {
  if (c == 'R') return 0;
  if (c == 'P') return 1;
  return 2;
}
const int beat[3][3] = {{0, -1, 1}, {1, 0, -1}, {-1, 1, 0}};
int n, q, a[200010];
char s[200010];
set<int> st[3];
inline int lowbit(int x) { return x & (-x); }
class BIT {
 public:
  int dat[200010];
  void modify(int p, int v) {
    for (; p <= n; p += lowbit(p)) dat[p] += v;
  }
  int query(int p) {
    int ret = 0;
    for (; p; p -= lowbit(p)) ret += dat[p];
    return ret;
  }
} T[3];
inline int calc() {
  int cnt = 0;
  for (int i = 0; i < 3; i++) cnt += (!st[i].empty());
  if (cnt == 1)
    return n;
  else if (cnt == 2) {
    for (int i = 0; i < 3; i++) {
      if (!st[i].empty())
        for (int j = i + 1; j < 3; j++) {
          if (!st[j].empty()) {
            if (beat[i][j] == 1) return st[i].size();
            return st[j].size();
          }
        }
    }
    return 114514;
  }
  int ans = 0;
  for (int i = 0; i < 3; i++) {
    int id = -1, id2;
    for (int j = 0; j < 3; j++) {
      if (beat[i][j] == 1) {
        id = j;
        break;
      }
    }
    id2 = 3 - i - id;
    int R1 = *st[id].rbegin(), L1 = *st[id].begin();
    int R2 = *st[id2].rbegin(), L2 = *st[id2].begin();
    ans += T[i].query(R1) - T[i].query(L1 - 1);
    ans += T[i].query(n) - T[i].query(max(R2, R1));
    ans += T[i].query(min(L1, L2));
  }
  return ans;
}
int main() {
  scanf("%d%d", &n, &q);
  scanf("%s", s + 1);
  for (int i = 1; i <= n; i++) a[i] = getid(s[i]);
  for (int i = 1; i <= n; i++) {
    st[a[i]].insert(i);
    T[a[i]].modify(i, 1);
  }
  printf("%d\n", calc());
  while (q--) {
    char opt[5];
    int p;
    scanf("%d%s", &p, opt);
    int x = getid(opt[0]);
    T[a[p]].modify(p, -1);
    st[a[p]].erase(p);
    a[p] = x;
    st[a[p]].insert(p);
    T[a[p]].modify(p, 1);
    printf("%d\n", calc());
  }
  return 0;
}
