#include<bits/stdc++.h>
#define int long long
using namespace std;
struct Node{
int l,p,s;
}a[101];
int dp[101][16001];
deque<int>q;
bool cmp(Node x1,Node x2){
return x1.s<x2.s;
}
signed main(){
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++){
scanf("%d%d%d",&a[i].l,&a[i].p,&a[i].s);
}
sort(a+1,a+k+1,cmp);
for(int i=1;i<=k;i++){
q.push_back(max(a[i].s-a[i].l,(long long)0));
for(int j=1;j<=n;j++){
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
if(j>a[i].s+a[i].l-1){
continue;
}
while(!q.empty()&&a[q.front()].s+a[q.front()].l<j){
q.pop_front();
}
if(j<a[i].s){
while(!q.empty()&&dp[i-1][q.back()]-a[i].p*q.back()<=dp[i-1][j]-a[i].p*j){
q.pop_back();
}
q.push_back(j);
continue;
}
if(!q.empty())
dp[i][j]=max(dp[i][j],dp[i-1][q.front()]+a[i].p*j-a[i].p*q.front());
}
while(!q.empty()){
q.pop_back();
}
}
printf("%lld",dp[k][n]);
return 0;
}