#include <bits/stdc++.h>
using namespace std;
template<typename T>
struct Fenwick {
vector<T> f;
int n;
Fenwick(int n) : n(n) {
f.resize(n);
}
void upd1(int i, T x) {
while (i >= 0) {
f[i] += x;
i = (i & i + 1) - 1;
}
}
void upd2(int i, T x) {
while (i < n) {
f[i] += x;
i |= i + 1;
}
}
T qry1(int i) {
T s{};
while (i < n) {
s += f[i];
i |= i + 1;
}
return s;
}
T qry2(int i) {
T s{};
while (i >= 0) {
s += f[i];
i = (i & i + 1) - 1;
}
return s;
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int k, n;
cin >> k >> n;
vector<tuple<int, int, int>> v;
long long ans = 0;
vector<int> pts;
for (int i = 0; i < n; i++) {
char p, q;
int s, t;
cin >> p >> s >> q >> t;
ans += abs(s - t);
if (p != q) {
v.push_back({s + t, min(s, t), max(s, t)});
ans++;
pts.push_back(s);
pts.push_back(t);
}
}
if (v.empty()) {
cout << ans << '\n';
return 0;
}
sort(v.begin(), v.end());
sort(pts.begin(), pts.end());
pts.erase(unique(pts.begin(), pts.end()), pts.end());
int z = v.size(), x = pts.size();
vector<long long> l(z + 1), r(z + 2);
Fenwick<long long> f1(x), f3(x);
Fenwick<int> f2(x), f4(x);
auto eval = [&](int i) {
return f1.qry1(i) - (long long) pts[i] * f2.qry1(i) + (long long) pts[i] * f4.qry2(i) - f3.qry2(i);
};
for (int i = 0, j = 0; i < z; i++) {
auto &[u, s, t] = v[i];
s = lower_bound(pts.begin(), pts.end(), s) - pts.begin();
t = lower_bound(pts.begin(), pts.end(), t) - pts.begin();
f1.upd1(s, pts[s]);
f2.upd1(s, 1);
f3.upd2(t, pts[t]);
f4.upd2(t, 1);
while (j + 1 < x && eval(j) >= eval(j + 1)) {
++j;
}
l[i + 1] = eval(j);
}
f1 = f3 = Fenwick<long long> (x);
f2 = f4 = Fenwick<int> (x);
for (int i = z - 1, j = x - 1; i >= 0; i--) {
auto [u, s, t] = v[i];
f1.upd1(s, pts[s]);
f2.upd1(s, 1);
f3.upd2(t, pts[t]);
f4.upd2(t, 1);
while (j && eval(j) >= eval(j - 1)) {
--j;
}
r[i + 1] = eval(j);
}
long long mn = 1e18;
if (k == 2) {
for (int i = 0; i <= z; i++) {
mn = min(mn, l[i] + r[i + 1]);
}
} else {
mn = min(r[1], l[z]);
}
cout << ans + mn * 2 << '\n';
return 0;
}