#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
cin.tie(0)->sync_with_stdio(0);
int K, N; cin >> K >> N;
int re = 0, ans;
vector<int> S, T;
for(int i = 0; i < N; i++) {
char p, q; int s, t; cin >> p >> s >> q >> t;
if (s > t) swap(s, t);
if (p != q) S.push_back(s), T.push_back(t), re++;
else re += t-s;
}
int M = S.size();
if (!M) {cout << re; return 0;}
vector<int> ord(M);
iota(ord.begin(), ord.end(), 0);
sort(ord.begin(), ord.end(), [&](const int a, const int b){return S[a] + T[a] < S[b] + T[b];});
priority_queue<int> le;
priority_queue<int, vector<int>, greater<>> ri;
int ls = 0, rs = 0;
vector<int> cost;
auto add = [&](int i) {
le.push(S[i]), le.push(T[i]);
ls += S[i], ls += T[i];
while(le.size() && ri.size() && le.top() > ri.top()) {
ls -= le.top(), rs += le.top();
ri.push(le.top());
le.pop();
}
while(le.size() < ri.size()) {
ls += ri.top(), rs -= ri.top();
le.push(ri.top());
ri.pop();
}
while(le.size() > ri.size() + 1) {
ls -= le.top(), rs += le.top();
ri.push(le.top());
le.pop();
}
};
for(int &i: ord) {
add(i);
int med = le.top();
cost.push_back(rs - med * ri.size() + med * le.size() - ls);
}
ans = cost[M-1];
if (K == 2) {
le = {}, ri = {}, ls = 0, rs = 0;
for(int cnt = M-1; cnt; cnt--) {
add(ord[cnt]);
int med = le.top();
ans = min(ans, cost[cnt-1] + rs - med * (int)ri.size() + med * (int)le.size() - ls);
}
}
cout << re + ans;
}