output_description: Print the answer.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N Q
      s
      t_1 d_1
      \vdots
      t_{Q} d_Q
attempt: N, Q = map(int, input().split())
  s = input()
  AlphabetSet = set()
  ThingDict = {}
  ShiftDict = {}
  
  for i, alphabet in enumerate(s):
      ThingDict.setdefault(alphabet, [])
      ThingDict[alphabet].append(i)
      ShiftDict.setdefault(alphabet, [])
  
  Step = 1
  for i in range(Q):
      t, d = input().split()
      if d == "L":
          try:
              ShiftDict[t].append([-1, Step])
              Step += 1
          except KeyError:
              pass
      elif d == "R":
          try:
              ShiftDict[t].append([1, Step])
              Step += 1
          except KeyError:
              pass
  
  # Gone from left side
  MinusList = []
  PlusList = []
  for i, alphabet in enumerate(s):
      tempMinusList = []
      tempPlusList = []
      for sdict in ShiftDict[alphabet]:
          if sdict[0] == -1:
              tempMinusList.append(sdict[1])
          if sdict[0] == 1:
              tempPlusList.append(sdict[1])
      if tempMinusList != []:
          MinusList.append(tempMinusList)
          PlusList.append(tempPlusList)
      else:
          break
  
  
  tempStep = []
  for i in range(len(MinusList) - 1):
      Ml_i = MinusList[i]
      Pl_ip1 = PlusList[i + 1]
      Ml_ip1 = MinusList[i + 1]
  
      for Mi in Ml_i:
  
          Max_Pip1 = 0
          for Pip1 in Pl_ip1:
              if Pip1 < Mi and Pip1 > Max_Pip1:
                  Max_Pip1 = Pip1
  
          Max_Mip1 = 0
          for Mip1 in Ml_ip1:
              if Mip1 < Mi and Mip1 > Max_Mip1:
                  Max_Mip1 = Mip1
  
          if Max_Mip1 == 0:
              tempStep.append(i)
              break
          elif Max_Mip1 > Max_Pip1:
              tempStep.append(i)
          else:
              tempStep.append(i)
              break
  
  if len(tempStep) > 0:
      Ans = N - max(tempStep) - 1
  
  
  # Gone from right side
  MinusList = []
  PlusList = []
  for i, alphabet in enumerate(reversed(s)):
      tempMinusList = []
      tempPlusList = []
      for sdict in ShiftDict[alphabet]:
          if sdict[0] == -1:
              tempMinusList.append(sdict[1])
          if sdict[0] == 1:
              tempPlusList.append(sdict[1])
      if tempPlusList != []:
          MinusList.append(tempMinusList)
          PlusList.append(tempPlusList)
      else:
          break
  
  tempStep = []
  for i in range(len(PlusList) - 1, 1, -1):
      Pl_i = PlusList[i]
      Pl_ip1 = PlusList[i - 1]
      Ml_ip1 = MinusList[i - 1]
  
      for Pi in Pl_i:
  
          Max_Mip1 = 0
          for Mip1 in Ml_ip1:
              if Mip1 < Pi and Mip1 > Max_Mip1:
                  Max_Mip1 = Mip1
  
          Max_Pip1 = 0
          for Pip1 in Pl_ip1:
              if Mip1 < Pi and Pip1 > Max_Pip1:
                  Max_Pip1 = Pip1
  
          if Max_Pip1 == 0:
              tempStep.append(i)
              break
          elif Max_Pip1 > Max_Mip1:
              tempStep.append(i)
          else:
              tempStep.append(i)
              break
  
  if len(tempStep) > 0:
      Ans = Ans - max(tempStep) - 1
  
  print(Ans)
  
problem_description: Statement
  
  There are N squares numbered 1 to N from left to right. Each square has a
  character written on it, and Square i has a letter s_i. Besides, there is
  initially one golem on each square.
  
  Snuke cast Q spells to move the golems.
  
  The i-th spell consisted of two characters t_i and d_i, where d_i is `L` or
  `R`. When Snuke cast this spell, for each square with the character t_i, all
  golems on that square moved to the square adjacent to the left if d_i is `L`,
  and moved to the square adjacent to the right if d_i is `R`.
  
  However, when a golem tried to move left from Square 1 or move right from
  Square N, it disappeared.
  
  Find the number of golems remaining after Snuke cast the Q spells.
samples: [{"input": "3 4\n    ABC\n    A L\n    B L\n    B R\n    A R", "output": "2\n    \n\n  * Initially, there is one golem on each square.\n  * In the first spell, the golem on Square 1 tries to move left and disappears.\n  * In the second spell, the golem on Square 2 moves left.\n  * In the third spell, no golem moves.\n  * In the fourth spell, the golem on Square 1 moves right.\n  * After the four spells are cast, there is one golem on Square 2 and one golem on Square 3, for a total of two golems remaining.\n\n* * *"}, {"input": "8 3\n    AABCBDBA\n    A L\n    B R\n    A R", "output": "5\n    \n\n  * After the three spells are cast, there is one golem on Square 2, two golems on Square 4 and two golems on Square 6, for a total of five golems remaining.\n  * Note that a single spell may move multiple golems.\n\n* * *"}, {"input": "10 15\n    SNCZWRCEWB\n    B R\n    R R\n    E R\n    W R\n    Z L\n    S R\n    Q L\n    W L\n    B R\n    C L\n    A L\n    N L\n    E R\n    Z L\n    S L", "output": "3"}]