#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, q, u;
char c, s[N];
struct STree {
  int tr[4 * N];
  void update(int l, int r, int i, int u, int v) {
    tr[i] += v;
    if (l == r) return;
    if (u <= (l + r) / 2)
      update(l, (l + r) / 2, i * 2, u, v);
    else
      update((l + r) / 2 + 1, r, i * 2 + 1, u, v);
  }
  int query(int l, int r, int i, int L, int R) {
    if (l > R || r < L || L > R) return 0;
    if (L <= l && r <= R) return tr[i];
    return query(l, (l + r) / 2, i * 2, L, R) +
           query((l + r) / 2 + 1, r, i * 2 + 1, L, R);
  }
  int fpos(int l, int r, int i, bool fi = true) {
    if (l == r) return l;
    if (fi)
      return (tr[i * 2] >= 1 ? fpos(l, (l + r) / 2, i * 2, fi)
                             : fpos((l + r) / 2 + 1, r, i * 2 + 1, fi));
    else
      return (tr[i * 2 + 1] >= 1 ? fpos((l + r) / 2 + 1, r, i * 2 + 1, fi)
                                 : fpos(l, (l + r) / 2, i * 2, fi));
  }
  int lpos(int l, int r, int i, bool fi = true) {
    if (l == r) return fi ? l - 1 : n - l;
    if (fi)
      return (tr[i * 2] == (l + r) / 2 - l + 1
                  ? lpos((l + r) / 2 + 1, r, i * 2 + 1, fi)
                  : lpos(l, (l + r) / 2, i * 2, fi));
    else
      return (tr[i * 2 + 1] == r - (l + r) / 2
                  ? lpos(l, (l + r) / 2, i * 2, fi)
                  : lpos((l + r) / 2 + 1, r, i * 2 + 1, fi));
  }
} seg[3];
int conv(char c) {
  if (c == 'R')
    return 0;
  else if (c == 'S')
    return 1;
  else
    return 2;
}
int query(int typ) {
  int nxt = (typ + 1) % 3;
  int l = seg[nxt].fpos(1, n, 1, true), r = seg[nxt].fpos(1, n, 1, false);
  if (l > r)
    return (seg[typ].query(1, n, 1, 1, n) == n ? n : 0);
  else
    return seg[typ].query(1, n, 1, l, r) + seg[typ].lpos(1, n, 1, true) +
           seg[typ].lpos(1, n, 1, false);
}
int find_ans() {
  int ans = 0;
  for (int i = 0; i < 3; i++) ans += query(i);
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n >> q >> (s + 1);
  for (int i = 1; i <= n; i++) seg[conv(s[i])].update(1, n, 1, i, 1);
  cout << find_ans() << '\n';
  while (q--) {
    cin >> u >> c;
    seg[conv(s[u])].update(1, n, 1, u, -1);
    s[u] = c;
    seg[conv(s[u])].update(1, n, 1, u, 1);
    cout << find_ans() << '\n';
  }
}
