#include <bits/stdc++.h>
using namespace std;
const long long INF = 1000000007;
const int MAX = 210000;
const int MOD = 1000000007;
long long fac[MAX], finv[MAX], inv[MAX];
void COMinit() {
  fac[0] = fac[1] = 1;
  finv[0] = finv[1] = 1;
  inv[1] = 1;
  for (int i = 2; i < MAX; i++) {
    fac[i] = fac[i - 1] * i % MOD;
    inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
    finv[i] = finv[i - 1] * inv[i] % MOD;
  }
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int pr[100010];
void uini(int n) {
  for (size_t i = 0; i <= n; i++) {
    pr[i] = i;
  }
}
int parent(int x) {
  if (x == pr[x]) return x;
  return pr[x] = parent(pr[x]);
}
bool unit(int x, int y) {
  int px = parent(x);
  int py = parent(y);
  if (px == py) return false;
  if (px < py) {
    pr[py] = px;
  } else {
    pr[px] = py;
  }
  return true;
}
vector<vector<int>> calcNext(const string& S) {
  int n = (int)S.size();
  vector<vector<int>> res(n + 1, vector<int>(26, n));
  for (int i = n - 1; i >= 0; --i) {
    for (int j = 0; j < 26; ++j) res[i][j] = res[i + 1][j];
    res[i][S[i] - 'a'] = i;
  }
  return res;
}
void add(long long& a, long long b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
long long slide(vector<long long>& v, long long a, long long b) {
  long long azv = abs(v[0] - a);
  long long bzv = abs(v[0] - b);
  long long aov = abs(v[1] - a);
  long long bov = abs(v[1] - b);
  v[0] = a;
  v[1] = b;
  return max((azv + bov), (bzv + aov));
}
bool a[100010];
string gcs(string s, string t) {
  long long high = min(s.size(), t.size());
  long long low = 0;
  long long mid = -1;
  for (size_t i = 0; i < 20; i++) {
    mid = (high + low) / 2;
    string st = s.substr(0, mid);
    string tt = t.substr(0, mid);
    if (st == tt) {
      low = mid;
    } else
      high = mid;
    if (s.size() <= mid || t.size() <= mid) continue;
    st = s.substr(0, mid + 1);
    tt = t.substr(0, mid + 1);
    if (st == tt) {
      low = mid + 1;
      mid = mid + 1;
    }
  }
  return s.substr(0, mid);
}
struct solver {
  map<string, pair<int, int>> memo;
  pair<int, int> calc(string s) {
    if (s == "" || s == "()") {
      return memo[s] = pair<int, int>(0, 0);
    } else if (s == "((")
      return memo[s] = pair<int, int>(1, 1);
    else if (s == "))")
      return memo[s] = pair<int, int>(1, 0);
    auto res = rec(s);
    if (s.size() == 2) {
      res.first = 0;
      res.second = 0;
      if (s[0] == ')') {
        res.first = 1;
      }
      if (s[1] == '(') {
        res.first++;
        res.second = 1;
      }
    }
    return res;
  }
  pair<int, int> rec(string s) {
    if (memo.count(s)) return memo[s];
    pair<int, int> res;
    res.first = INF;
    res.second = INF;
    int n = s.size();
    if (n == 0) return res = pair<int, int>(0, 0);
    res = calc(s.substr(1, n - 2));
    if (res.first > 0) {
      res.second++;
    }
    if (s[0] == ')') {
      res.first++;
    }
    if (s[s.size() - 1] == '(') {
      res.first++;
      res.second = s.size() - 1;
    }
    for (int i = s.size() - 2; i > 1; i -= 2) {
      string ls = s.substr(0, i);
      auto left = calc(ls);
      string rs = s.substr(i, n - i);
      auto right = calc(rs);
      int lval = left.first + right.first;
      int rval = left.second;
      if (right.first > 0) rval = i + right.second;
      if ((res.first + res.second) > (lval + rval)) {
        res.first = lval;
        res.second = rval;
      }
    }
    return memo[s] = res;
  }
};
pair<char, int> qp[200010];
string s;
map<int, bool> memo[200010];
int n, q;
bool check(int ind, int ro) {
  if (ind == -1) return false;
  if (ind == n) return false;
  if (q == ro) return true;
  if (memo[ind].count(ro)) {
    return memo[ind][ro];
  }
  bool& res = memo[ind][ro];
  if (s[ind] == qp[ro].first) {
    res = check(ind + qp[ro].second, ro + 1);
  } else {
    res = check(ind, ro + 1);
  }
  return res;
}
void solv() {
  cin >> n >> q;
  cin >> s;
  int qa[25];
  pair<int, int> la[26];
  pair<int, int> ra[26];
  for (size_t i = 0; i < 26; i++) {
    la[i].first = 0;
    la[i].second = 0;
    ra[i].first = n - 1;
    ra[i].second = n - 1;
  }
  for (size_t i = 0; i < q; i++) {
    char d, t;
    cin >> d >> t;
    int p = d - 'A';
    qp[i].first = d;
    qp[i].second = (t == 'L') ? -1 : 1;
  }
  int res = 0;
  for (size_t i = 0; i < n; i++) {
    res += check(i, 0);
  }
  cout << res << endl;
}
int main() {
  solv();
  return 0;
}
