#include <stdio.h>

int main(){
	int n,q;
	int i,j;
	scanf("%d %d",&n,&q);
	char s[200004];
		scanf("%s",&s);
	char t[200001],d[200001];
	for(i=0;i<q;i++){
		scanf("\n%c %c",&t[i],&d[i]);
	}
	int check(int k){
		/*
		マス目kにあるゴレが生存するかどうかを調べる
		右に消える場合は2を返し
		左に消える場合は1を返す
		消えない場合は0を返す
		*/
		int cur = k;
		for(i=0;i<q;i++){
			if(t[i]==s[cur]){
				switch(d[i]){
				case'R':
					if(cur==(n-1)){
						return 2;
					}
					cur++;
					break;
				case'L':
					if(cur==0){
						return 1;
					}
					cur--;
					break;
				}
			}
		}
		return 0;
	}
	/*
	左に消えるゴーレムの中で最大のものを二分探索で調べる
	*/
	int min = 0;
	int max = n-1;
	int left,right;
	for(i=0;i<n;i++){
		if( check(max)==1){
			left = max;
			break;
		}else if(check(max)==0){
			max = (min+max)/2;
			if( max==0 && check(0)==0){
				left = -1;
				break;
			}
		}else{
			break;
		}
	}
	//printf("左から%dまで消える",left);
	min = n-1;
	max = 0;
	for(i=0;i<n;i++){
		if( check(max)==2){
			right = max;
			break;
		}else if(check(max)==0)	{
			max = (min+max)/2;
			if( max==n-1 && check(n-1)==0){
				right = n;
				break;
			}
		}else{
			break;
		}
	}
	/*
	左からleftまで消滅
	右からrightまで消滅
	*/
	int ans = n - (left+1) -(n- right);
	printf("%d",ans);
	return 0;
}
