"""愚直にやるとO(NQ)
左右にいたロボットが移動によって
交差することはあり得ない
<-
移動は１マスずつなので、
一度重なった後に左右に分かれる必要がある

クエリ処理後のロボット座標は
x1<=x2<=...<=xn(広義単調増加)
単調増加の列が得られる
x1:=最初に１にいたロボット, ...

この列で
１からNの範囲にいるものはどれか？
二分探索で出来る
左の境界を探す二分探索
右の境界を探す二分探索
O(QlogN)
"""


def is_OK(index):
    """消滅せずに残るならTrue"""
    if index in (-1, N):
        # print(False)
        return False
    for t, d in e:
        # print(index, s[index], t, d, end='')
        if t == s[index]:
            if d == 'R':
                index += 1
            else:
                index -= 1
        # print('->', index, s[index] if 0 <= index < N else '==Removed')
        if index in (-1, N):
            # print(False)
            return False
    # print(True)
    return True


N, Q = map(int, input().split())
s = input()

e = [input().split() for _ in range(Q)]
# t: 文字 <- siと比較
# d: 'L', 'R'

# right
ng = N
ok = -1
while abs(ok - ng) > 1:
    mid = (ok + ng) // 2
    if is_OK(mid):
        ok = mid
    else:
        ng = mid
right = ok
# print('right', right)

# left
ng = -1
ok = N
while abs(ok - ng) > 1:
    mid = (ok + ng) // 2
    if is_OK(mid):
        ok = mid
    else:
        ng = mid
left = ok
# print('left', left)
# [left, right] = 残存区間

print(right - left + 1)
