# -*- coding: utf-8 -*-
import itertools
import sys
import math
from functools import lru_cache

# 1整数
# n = int(input())

# 空白区切り2変数
from queue import Queue
from operator import mul
from functools import reduce

import sys

input = sys.stdin.readline

# N個整数
n, q = list(map(int, input().split()))

s = input()

ans = set()

qq = [''] * q

for i in range(q):
    t, d = input().split()
    qq[i] = t + d


##i番目の呪文を唱える直前にposにいるゴーレムの数を返す
def dfs(pos, i):
    ret = 0
    start = -1
    ##このマスから移動した呪文までを見る必要がある
    for ii in range(i - 1, -1, -1):
        if qq[ii][0] == s[pos]:
            start = ii
            break
    if start == -1:
        ret += 1

    if pos != 0:
        # 0でなければ左からposの位置へ動くものを見つける
        for ii in range(i - 1, start, -1):
            if qq[ii] == s[pos - 1] + 'R':
                ret += dfs(pos - 1, ii)

    if pos != n - 1:
        # 右からposの位置へ動く呪文を見つける
        for ii in range(i - 1, -1, -1):
            if qq[ii] == s[pos + 1]+'L':
                ret += dfs(pos + 1, ii)
    #print(pos, i, ret)

    return ret


ret = 0

for ii in range(q - 1, -1, -1):
    if qq[ii] == s[0] + 'L':
        ret += dfs(0, ii)

for ii in range(q - 1, -1, -1):
    if qq[ii] == s[n - 1] + 'R':
        ret += dfs(n - 1, ii)

print(n-ret)

# 1整数
# n = int(input())

# 空白区切りリスト整数
# b = list(map(int, input().split()))
