#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector VI; typedef pair PII; #define REP(i,s,t) for(int i=(s);i<(t);i++) #define FILL(x,v) memset(x,v,sizeof(x)) string dynamics[8] = {"ppp","pp","p","mp","mf","f","ff","fff"}; VI ps[8]; int main() { int n, m; cin >> n >> m; VI p(n), d(n); REP(i,0,n) cin >> p[i]; REP(j,0,m) { int curIdx; string dyn; cin >> curIdx >> dyn; int di = find(dynamics, dynamics + 8, dyn) - dynamics; d[curIdx - 1] = di + 1; } int curDi = -1; REP(i,0,n) { if (d[i] > 0) curDi = d[i] - 1; ps[curDi].push_back(p[i]); } REP(i,0,8) sort(ps[i].begin(), ps[i].end(), greater()); ll ans = 0; REP(it,0,n) { int minIdx = -1; REP(i,0,8) { if (ps[i].empty()) continue; if (minIdx == -1 || ps[i].back() <= ps[minIdx].back()) minIdx = i; } REP(i,0,minIdx) ans += ps[i].size(); ps[minIdx].pop_back(); } cout << ans << endl; return 0; }