#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1010,INF=0x3f3f3f3f;
int n,m;
int S=1,T=2001,TT=2002;
int h[N],e[N],ne[N],f[N],c[N],idx;
int st[N];
int dist[N],pre[N];
int rea[N],cost[N],sta[N];
void add(int a,int b,int flow,int cost)
{
e[idx]=b,f[idx]=flow,c[idx]=cost,ne[idx]=h[a],h[a]=idx++;
e[idx]=a,f[idx]=0,c[idx]=-1*cost,ne[idx]=h[b],h[b]=idx++;
}
bool spfa()
{
for(int i=1;i<=2002;i++)
{
dist[i]=2e9;
st[i]=false;
pre[i]=-1;
}
dist[S]=0;
queue<int> q;
q.push(S);
st[S]=true;
while(q.size())
{
int x=q.front();
q.pop();
st[x]=false;
for(int i=h[x];~i;i=ne[i])
{
int j=e[i];
if(f[i]&&dist[j]>dist[x]+c[i])
{
dist[j]=dist[x]+c[i];
pre[j]=i;
if(!st[j]) st[j]=true,q.push(j);
}
}
}
if(pre[TT]==-1) return false;
return true;
}
int mincost_f()
{
int ans=0;
while(spfa())
{
ans++;
}
return ans;
}
int main()
{
cin>>n>>m;
memset(h,-1,sizeof h);
for(int i=1;i<=m;i++)
{
cin>>rea[i]>>cost[i]>>sta[i];
add(S,2*i,INF,0);
add(2*i+1,T,INF,0);
add(2*i,2*i+1,1,-cost[i]);
}
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
{
int x=rea[i],y=rea[j]+sta[j];
if(x>y)
add(2*j+1,2*i,1,0);
}
add(T,TT,n,0);
cout<<-mincost_f()<<endl;
return 0;
}