// goodwincommaderek@gmail.com import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; public class pianissino_dg_ac { public static void main(String[] args) throws IOException { // ppp, pp, p, mp, mf, f, ff, fff HashMap dynStrToInt = new HashMap<>(); dynStrToInt.put("ppp", 0); dynStrToInt.put("pp", 1); dynStrToInt.put("p", 2); dynStrToInt.put("mp", 3); dynStrToInt.put("mf", 4); dynStrToInt.put("f", 5); dynStrToInt.put("ff", 6); dynStrToInt.put("fff", 7); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] in; int $; in = br.readLine().split(" "); $ = 0; int N = Integer.parseInt(in[$++]); int M = Integer.parseInt(in[$++]); int[] arr = new int[N]; int[] dyns = new int[N]; Arrays.fill(dyns, -1); for (int n = 0; n < N; n++) { in = br.readLine().split(" "); $ = 0; arr[n] = Integer.parseInt(in[$++]); } for (int m = 0; m < M; m++) { in = br.readLine().split(" "); $ = 0; int startDex = -1 + Integer.parseInt(in[$++]); int dynamic = dynStrToInt.get(in[$++]); dyns[startDex] = dynamic; } for(int n = 1; n < N; n++) { if (dyns[n] == -1) { dyns[n] = dyns[n-1]; } } // bucket them ArrayList[] powerOfDyns = new ArrayList[8]; for(int i = 0; i < 8; i++) powerOfDyns[i] = new ArrayList<>(); for(int n = 0; n < N; n++) { powerOfDyns[dyns[n]].add(arr[n]); } // sort the buckets for(int i = 0; i < 8; i++) { powerOfDyns[i].sort(Integer::compareTo); } long numInfuriatingPairs = 0; // seven pointer sweep lmao for(int i = 0; i < 8; i++) { int[] pointers = new int[8]; for(Integer power : powerOfDyns[i]) { // adjust the pointers of dynamics lower than us for(int j = 0; j < i; j++) { while (pointers[j] < powerOfDyns[j].size() && powerOfDyns[j].get(pointers[j]) < power) { pointers[j]++; } // add to the count numInfuriatingPairs += powerOfDyns[j].size() - pointers[j]; } } } System.out.println(numInfuriatingPairs); } }