#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct Median{
priority_queue<ll> l;
priority_queue<ll> r;
ll sl=0,sr=0;
void add(ll x){
if(l.size()==0 or x<=l.top()){
l.push(x);
sl+=x;
}
else{
r.push(-x);
sr+=x;
}
if(l.size()>r.size()+1){
sr+=l.top();
r.push(-l.top());
sl-=l.top();
l.pop();
}
else if(r.size()>l.size()){
sl+=-r.top();
l.push(-r.top());
sr-=-r.top();
r.pop();
}
}
ll get(){
if(l.size()>r.size()) return sr-sl+l.top();
else return sr-sl;
}
};
int main(void){
ios::sync_with_stdio(0) ; cin.tie(0);
ll k,n,i,j;
cin>>k>>n;
vector<char> p(n),q(n);
vector<ll> s(n),t(n);
vector<pair<ll,ll>> v;
ll ans=0;
for(i=0 ; i<n ; i++){
cin>>p[i]>>s[i]>>q[i]>>t[i];
if(p[i]==q[i]) ans+=abs(s[i]-t[i]);
else{
v.push_back({s[i]+t[i],i});
ans++;
}
}
if(v.size()==0){
cout<<ans<<"\n";
return 0;
}
sort(v.begin(),v.end());
ll sz=v.size();
vector<ll> pre(sz);
Median ml,mr;
for(i=0 ; i<sz ; i++){
ml.add(t[v[i].second]);
ml.add(s[v[i].second]);
pre[i]=ml.get();
}
if(k==1){
cout<<ans+pre[sz-1]<<"\n";
return 0;
}
ll val=pre[sz-1];
for(i=sz-1 ; i>0 ; i--){
mr.add(t[v[i].second]);
mr.add(s[v[i].second]);
val=min(val,pre[i-1]+mr.get());
}
cout<<ans+val<<"\n";
return 0;
}