#include <bits/stdc++.h>
using namespace std;
const int inf = int(2e9);
int64_t rs, ls;
priority_queue<int> lpq, rpq;
void insert(int x) {
int median = (lpq.empty() ? inf : lpq.top());
if (x <= median) {
lpq.push(x);
ls += x;
} else {
rpq.push(-x);
rs += x;
}
if (lpq.size() > rpq.size() + 1) {
int m = lpq.top();
lpq.pop();
ls -= m;
rpq.push(-m);
rs += m;
} else if (rpq.size() > lpq.size()) {
int m = -rpq.top();
rpq.pop();
rs -= m;
lpq.push(m);
ls += m;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int k, n;
cin >> k >> n;
vector<pair<int, int>> segs;
int64_t same = 0;
for (int i = 0; i < n; i++) {
char p;
cin >> p;
int s;
cin >> s;
char q;
cin >> q;
int t;
cin >> t;
int l = min(s, t);
int r = max(s, t);
if (p != q) {
same++;
segs.emplace_back(l, r);
} else {
same += r - l;
}
}
n = int(segs.size());
sort(segs.begin(), segs.end(), [&](auto& a, auto& b) {
return (a.first + a.second < b.first + b.second);
});
vector<int64_t> pref(n + 1);
for (int i = 0; i < n; i++) {
insert(segs[i].first);
insert(segs[i].second);
pref[i + 1] = rs - ls;
}
ls = rs = 0;
while (!lpq.empty()) {
lpq.pop();
}
while (!rpq.empty()) {
rpq.pop();
}
vector<int64_t> suf(n + 1);
for (int i = n - 1; i >= 0; i--) {
insert(segs[i].first);
insert(segs[i].second);
suf[i + 1] = rs - ls;
}
int64_t ans = LLONG_MAX;
for (int i = 0; i < n; i++) {
ans = min(ans, pref[i] + suf[i + 1]);
}
cout << ans + same << '\n';
return 0;
}