#include <bits/stdc++.h>
using namespace std;
const int maxn = 200050;
char a[maxn];
int get(char c) {
  if (c == 'P') return 0;
  if (c == 'R') return 1;
  return 2;
}
int n, q;
struct Bit {
  int sum[maxn];
  void add(int x, int val) {
    while (x <= n) sum[x] += val, x += (x & -x);
  }
  int query(int x) {
    int ans = 0;
    while (x) ans += sum[x], x -= (x & -x);
    return ans;
  }
} tr[3];
set<int> st[3];
void solve() {
  int ans = 0;
  for (int i = 0; i < 3; ++i) {
    int j = (i + 1) % 3, k = (j + 1) % 3, l = 1, r = 0;
    if (st[k].empty()) ans += st[i].size();
    if (st[i].empty() || st[j].empty() || st[k].empty()) continue;
    ans += (tr[i].query(*st[j].rbegin()) - tr[i].query((*st[j].begin()) - 1));
    ans += tr[i].query(min(*st[j].begin(), *st[k].begin()));
    ans +=
        (tr[i].query(n) - tr[i].query(max(*st[j].rbegin(), *st[k].rbegin())));
  }
  printf("%d\n", ans);
}
int main() {
  scanf("%d%d", &n, &q);
  scanf("%s", a + 1);
  for (int i = 1; i <= n; ++i) {
    a[i] = get(a[i]), tr[a[i]].add(i, 1), st[a[i]].insert(i);
  }
  solve();
  while (q--) {
    int p;
    char s[2];
    scanf("%d%s", &p, s);
    int c = get(s[0]);
    tr[a[p]].add(p, -1);
    tr[c].add(p, 1);
    st[a[p]].erase(p);
    st[c].insert(p);
    a[p] = c;
    solve();
  }
  return 0;
}
