#include<queue>
#include<vector>
#include<string>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 35005
#define ll long long
int n,m,dis[maxn],cnt[maxn];
bool vis[maxn];
queue<int> que;
struct node{
int to,val;
node(int to,int val):to(to),val(val){}
};
vector<node> q[maxn];
void SPFA(int start,int n){
memset(dis,-127,sizeof(dis));
dis[start]=0;
que.push(start);
while(!que.empty()){
int now=que.front();
que.pop();
vis[now]=false;
for(int i=0;i<q[now].size();i++){
int v=q[now][i].to;
if(dis[v]<dis[now]+q[now][i].val){
dis[v]=dis[now]+q[now][i].val;
if(!vis[v]){
vis[v]=true;
que.push(v);
cnt[v]++;
}
}
}
}
}
int main(void){
int x,y,w,ans=0;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&w);
q[x-1].push_back(node(y,w));
}
for(int i=0;i<=n;i++)
q[n+1].push_back(node(i,0));
for(int i=0;i<n;i++){
q[i].push_back(node(i+1,0));
q[i+1].push_back(node(i,-1));
}
SPFA(n+1,n);
printf("%d\n",dis[n]);
return 0;
}