import math

def isLive(g,n,q,t,d):
  g_c = g;
  for i in range(q):
    if s[g_c] == t[i]:
      if d[i] == "R":
        g_c += 1
      else:
        g_c -= 1
    if g_c < 0:
      return "L"
    if g_c >= n:
      return "R"
  return "N"


n,q=list(map(int,input().split()))
s=input()
t=[]
d=[]
for i in range(q):
  tmp=input().split()
  t.append(tmp[0])
  d.append(tmp[1])

###左に落ちる一番右の位置を求める
left=0
right=n
left_fail=-1

#左に全員落ちる、または左に一体も落ちないかどうかを確認
if isLive(0,n,q,t,d) != "L":
  left_fail=-2
elif isLive(n-1,n,q,t,d)=="L":
  left_fail=n-1

while left_fail==-1:
  target=left+math.ceil((right-left)/2)
  if isLive(target,n,q,t,d)=="L":
    if isLive(target+1,n,q,t,d)!="L":
      #一番左
      left_fail=target
    else:
      #左に落ちる境目でないときは探索範囲を右に移す
      left=target+1
  else:
    #左に落ちないときは探索範囲を左に移す
    right=target-1

#右に落ちる一番左の位置を求める
left=0
right=n
right_fail=-1

#右に全員落ちる、または右に一体も落ちないかどうかを確認
if isLive(n-1,n,q,t,d) != "R":
  right_fail=-2
elif isLive(0,n,q,t,d)=="R":
  right_fail=0

while right_fail==-1:
  target=left+math.ceil((right-left)/2)
  if isLive(target,n,q,t,d)=="R":
    if isLive(target-1,n,q,t,d)!="R":
      #一番左
      right_fail=target
    else:
      #右に落ちる境目でないときは探索範囲を左に移す
      right=target-1
  else:
    #右に落ちないときは探索範囲を右に移す
    left=target+1

if right_fail < 0 and left_fail < 0:
  print(n)
elif right_fail < 0:
  print(n - (left_fail+1))
elif left_fail < 0:
  print(right_fail)
else:
  print(right_fail - left_fail - 1)