#include <bits/stdc++.h>
using namespace std;
long long const INF = 1000000000000000000;
int const I_MAX = 2147483647;
long long const MOD = 1e9 + 7;
int const POW_MAX = 1e5;
long long po[POW_MAX + 2];
long long mod_pow(long long x, long long n) {
  long long res = 1;
  while (n > 0) {
    if (n & 1) res = res * x % MOD;
    x = x * x % MOD;
    n >>= 1;
  }
  return res;
}
long long mod_inv(long long x) { return mod_pow(x, MOD - 2) % MOD; }
long long comb(int n, int r) {
  return (((po[n] * mod_inv(po[r])) % MOD) * mod_inv(po[n - r])) % MOD;
}
long long gcd(long long a, long long b) {
  while (a % b != 0) {
    long long tmp = a;
    a = b;
    b = tmp % b;
  }
  return b;
}
int const N_MAX = 1e5 * 2;
int N, Q;
char s[N_MAX + 1];
char ts[N_MAX + 1], ds[N_MAX + 1];
map<char, vector<int>> mp;
vector<char> vs[N_MAX + 1];
int cnts[N_MAX + 1];
int main() {
  scanf("%d %d", &N, &Q);
  scanf("%s", s);
  for (int i = 0; i < (N); i++) cnts[i]++;
  for (int i = 0; i < (Q); i++) {
    cin >> ts[i];
    cin >> ds[i];
  }
  for (int i = 0; i < (N); i++) {
    vs[i] = vector<char>{s[i]};
    if (mp.count(s[i]) == 0) {
      mp[s[i]] = vector<int>{i};
    } else {
      mp[s[i]].push_back(i);
    }
  }
  int dead = 0;
  for (int i = 0; i < (Q); i++) {
    char c = ts[i];
    char dir = ds[i];
    int d = dir == 'L' ? -1 : 1;
    vector<int> v = mp[c];
    for (int i = 0; i < (v.size()); i++) {
      int idx = v[i];
      int a_idx = idx + d;
      if (a_idx < 0 || a_idx >= N) {
        dead += cnts[idx];
        cnts[idx] = 0;
      } else {
        cnts[a_idx] += cnts[idx];
        cnts[idx] = 0;
      }
    }
  }
  printf("%d\n", N - dead);
}
