#include <bits/stdc++.h>
 
#define int long long 
#define MOD 1000000007
 
using namespace std;
 
signed main(){
 
    signed N,Q;
    cin >> N>>Q;

    string s;

    cin >>s;

    char t[Q];
    char d[Q];

    for(int i=0;i<Q;i++){
        cin >> t[i]>>d[i];
    }


    int ans_l=N;
    int ans_r=-1;

    int l=0;
    int r=N-1;

    map<int,bool> a;
    map<int,bool> b;

    while(1){
        int i = (l+r)/2;
        int pos = i;
        a[i]=false;
      
        if(i==l){
            //rが右に行くかどうか
            for(int j=0;j<Q;j++){
                if(s[pos]==t[j]){
                    if(d[j]=='R'){
                        pos++;
                    }
                    else{
                        pos--;
                    }

                    if(pos<0){
                        break;
                    }

                    if(pos>N-1){
                        a[i]=true;
                        break;
                    }
                }
            }

            pos=r;
            a[r]=false;
            for(int j=0;j<Q;j++){
                if(s[pos]==t[j]){
                    if(d[j]=='R'){
                        pos++;
                    }
                    else{
                        pos--;
                    }

                    if(pos<0){
                        break;
                    }

                    if(pos>N-1){
                        a[r]=true;
                        break;
                    }
                }
            }
            if(a[l]){
                 ans_l=l;
                 break;
            }

            else if(a[r]){
                ans_l=r;
                break;
            }
            else{
                break;
            }

        }

        

        for(int j=0;j<Q;j++){
            if(s[pos]==t[j]){
                if(d[j]=='R'){
                    pos++;
                }
                else{
                    pos--;
                }

                if(pos<0){
                    break;
                }

                if(pos>N-1){
                    a[i]=true;
                    break;
                }
            }
        }

        if(a[i]){
            r = i;

        }
          
        else{
            l=i;
        }


    }

    l=0;
    r=N-1;

  while(1){
        int i = (l+r)/2;
        int pos = i;
        //int flag = 0;
       b[i]=false;

         if(i==l){
            //rが左に行くかどうか
            for(int j=0;j<Q;j++){
                if(s[pos]==t[j]){
                    if(d[j]=='R'){
                        pos++;
                    }
                    else{
                        pos--;
                    }

                    if(pos>N-1){
                        break;
                    }

                    if(pos<0){
                        b[i]=true;
                        break;
                    }
                }
            }

            pos=r;
            b[r]=false;
            for(int j=0;j<Q;j++){
                if(s[pos]==t[j]){
                    if(d[j]=='R'){
                        pos++;
                    }
                    else{
                        pos--;
                    }

                    if(pos>N-1){
                        break;
                    }

                    if(pos<0){
                        b[r]=true;
                        break;
                    }
                }
            }
            if(b[r]){
                 ans_r=r;
                 break;
            }

            else if(b[l]){
                ans_r=l;
                break;
            }
            else{
                break;
            }

        }

         
        for(int j=0;j<Q;j++){
            if(s[pos]==t[j]){
                if(d[j]=='R'){
                    pos++;
                }
                else{
                    pos--;
                }

                if(pos>N-1){
                    break;
                }

                if(pos<0){
                    //flag = 1;
                    b[i]=true;
                    ans_r=i;
                    break;
                }


            }
        }

        if(b[i]){
            l = i;

        }
          
        else{
            r=i;
        }


    }

    //cout <<ans_l<<" "<<ans_r<<endl;

    if(ans_l>ans_r){
        cout << N-(N-ans_l+ans_r+1)<<endl;
    }

    else{
        cout <<"0"<<endl;
    }


 	return 0;
 
}

Measured memory_bytes: 1028