#ゴーレム判定関数
#pos=位置
#s=文字列
def survive(pos,s,spell,move,N):
    for i in range(0,len(spell)):
        if(s[pos]==spell[i]):
            pos+=move[i]
        #ゴーレムが消えたか判定
        if(pos<0):
            return -1
        elif(pos>N-1):
            return 1
    return 0

N,Q=map(int,input().split())
s=str(input())
tmp1=""
tmp2=""
tmp=0
#AとかBとかそういう奴らがどのくらい動くのかをカウント
spell=[]
move=[]
for time in range(0,Q):
    tmp1,tmp2=map(str,input().split())
    spell.append(tmp1)
    if(tmp2=="L"):
        move.append(-1)
    elif(tmp2=="R"):
        move.append(1)
left_result=-1
right_result=N
#右にoutしていくやつのうちもっとも左のやつを探す
left=0
right=N-1
mid=0
judge=False
#何も右から出ていかないパターン
if(survive(N-1,s,spell,move,N)!=1):
    right_result=N
else:
    while ((right+left)//2)!=mid:
        mid=(right+left)//2
        judge=survive(mid,s,spell,move,N)
        if(judge==1):
            right=mid
        else:
            left=mid
    right_result=right

#左にoutしていくやつのうちもっとも右のやつを探す
left=0
right=N-1
mid=0
judge=False
#何も左から出ていかないパターン
if(survive(0,s,spell,move,N)!=-1):
    left_result=-1
else:
    while ((right+left)//2)!=mid:
        mid=(right+left)//2
        judge=survive(mid,s,spell,move,N)
        if(judge==-1):
            left=mid
        else:
            right=mid
    left_result=left
        
ans=right_result-left_result-1
print(ans)