n, q = map(int, input().split())
listS = list("_"+input()+"_")
#呪文の性質上、ゴーレムの追い越しが存在しないため
#左から消える最も右にいるゴーレムと、
#右から消える最も左にいるゴーレムが知りたい
magicL=[]
index=0
while index < q:
    t, d = map(str, input().split())
    magicL.append([t, d])
    index+=1
#二回にぶたんする
def nibutan(listS, magicL, migiHidari):
    flag=1
    min=1
    max=len(listS)-2
    if migiHidari=="migi":
        clearIndex = len(listS)-1
    else:
        clearIndex = 0
    while True:
        middle = (min+max)//2
        index=middle
        for magic in magicL:
            if magic[0]==listS[index]:
                if magic[1]=="R":
                    index+=1
                else:
                    index-=1
            if migiHidari=="hidari" and index==0:
                clearIndex = middle
                break
            elif migiHidari == "migi" and index==len(listS)-1:
                clearIndex = middle
                break
        if migiHidari=="hidari":
            if index==0:
                min = middle
            else:
                max = middle
        elif migiHidari == "migi":
            if index==len(listS)-1:
                max = middle
            else:
                min = middle
        if max-min < 2:
            if flag:
                flag=0
            else:
                break
    return clearIndex

minI = nibutan(listS, magicL, "hidari")
maxI = nibutan(listS, magicL, "migi")
print(maxI-minI-1)