n,q=map(int,input().split())
s=input()
td=[list(input().split()) for _ in range(q)]


def bichk(x,flg):
  if not 0<=x<n:return False
  now=[x,s[x]]
  for t,d in td:
    if t==now[1]:
      if d=='L':
        x-=1
        if x<0 and flg:return False
        if x<0 and not flg:return True
        now=[x,s[x]]
      else:
        x+=1
        if x>n-1 and not flg:return False
        if x>n-1 and flg:return True
        now=[x,s[x]]
  return True
l,r=0,n
# 左から落ちないゴーレムの最小座標
while r-l>1:
  x=(l+r)//2
  if bichk(x,True):
    l,r=l,x
  else:
    l,r=x,r
l0=l if bichk(l,True) else r

l,r=0,n
# 右から落ちないゴーレムの最大座標
while r-l>1:
  x=(l+r)//2
  if bichk(x,False):
    l,r=x,r
  else:
    l,r=l,x
r0=r if bichk(r,False) else l
if l0==n-1:print(0)
elif r0==0:print(0)
else:
  print(max(0,r0-l0+1))
