#include <bits/stdc++.h>
#define int long long
#define ff first
#define ss second
using namespace std;
int ls = 0,rs = 0;
priority_queue <int> lst;
priority_queue <int, vector <int>, greater<int>> rst;
void push(int x) {
int mid;
if (!lst.empty()) {
mid = lst.top();
}
else {
mid = 1e18;
}
if (x <= mid) {
lst.push(x);
ls += x;
}
else {
rst.push(x);
rs += x;
}
if (rst.size() + 1 < lst.size()) {
int rem = lst.top();
lst.pop();
rst.push(rem);
ls -= rem;
rs += rem;
}
else if (rst.size() > lst.size()) {
int rem = rst.top();
rst.pop();
lst.push(rem);
rs -= rem;
ls += rem;
}
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL);
int k, n;
cin >> k >> n;
vector <array <int, 3>> v;
int ans = 0;
for (int i = 0;i < n;i++) {
char a, c;
int b, d;
cin >> a >> b >> c >> d;
if (a == c) {
ans += abs(d - b);
}
else {
ans++;
v.push_back({b + d, b, d});
}
}
sort(v.begin(), v.end());
int pref[v.size() + 1] = {0};
for (int i = 0;i < v.size();i++) {
push(v[i][1]);
push(v[i][2]);
pref[i + 1] = rs - ls;
}
// for (int i = 1;i <= n;i++) {
// cout << pref[i] << ' ';
// }
if (k == 2) {
priority_queue <int> emp;
priority_queue <int, vector <int>, greater<int>> emp1;
lst.swap(emp);
rst.swap(emp1);
ls = 0;
rs = 0;
int temp = pref[v.size()];
for (int i = v.size() - 1;i >= 0;i--) {
push(v[i][1]);
push(v[i][2]);
temp = min(temp, rs - ls + pref[i]);
}
cout << ans + temp << endl;
return 0;
}
else {
cout << ans + pref[v.size()] << endl;
return 0;
}
}