#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
#define ll long long
ll max_weights(int n, int m, vector<int> x, vector<int> y, vector<int> w){
if(n == 2){
ll ans0 = 0;
ll ans1 = 0;
for(ll i = 0; i<m; i++){
if(x[i] == 0) ans0 += (ll)w[i];
else ans1+=(ll)w[i];
}
return max(ans0, ans1);
}
vector<pair<ll, ll>> x0;
vector<pair<ll, ll>> x1;
ll mx = 0;
ll ans = 0;
for(ll i = 0; i<m; i++){
if(x[i] == 1) x1.push_back({y[i], w[i]});
else x0.push_back({y[i], w[i]});
}
x0.push_back({n+1, 0});
x1.push_back({n+1, 0});
sort(x0.begin(), x0.end());
sort(x1.begin(), x1.end());
for(ll i = 0; i<x1.size(); i++) ans += (ll)x1[i].second;
mx = ans;
ll ind0 = 0;
ll ind1 = 0;
for(ll i = 0; i<m; i++){
if(x0[ind0].first < x1[ind1].first){
ans += (ll)x0[ind0].second;
ind0++;
}
else if(x0[ind0].first == x1[ind1].first){
ans += (ll)x0[ind0].second;
ans -= (ll)x1[ind1].second;
ind0++;
ind1++;
}
else{
ans -= (ll) x1[ind1].second;
ind1++;
}
mx = max(mx, ans);
}
return mx;
}
// int main(void){
// freopen("input.txt", "r", stdin);
// int n1; cin>>n1;
// int m1; cin>>m1;
// vector<int> x1(m1, 0), y1(m1, 0), w1(m1, 0);
// for(int i = 0; i<m1; i++) cin>>x1[i]>>y1[i]>>w1[i];
// cout<<max_weights(n1, m1, x1, y1, w1)<<endl;
// return 0;
// }