#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#define ll long long
#define inf 1e9
using namespace std;
typedef pair<double,int> pii;
struct node
{
int v,w;
};
struct Graph
{
vector<node> v;
}a[30010];
int n,m,vis[30010],dis[30010];
void spfa(int s)
{
queue<int>q;
for(int i=1;i<=n;++i)
{
dis[i]=inf;
vis[i]=0;
}
q.push(s);
dis[s]=0;
vis[s]=1;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(auto e:a[u].v)
{
int v=e.v,w=e.w;
if(dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
if(vis[v]==0)
{
vis[v]=1;
q.push(v);
}
}
}
}
return;
}
void solve()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
a[y].v.push_back({x-1,-z});
}
for(int i=1;i<=n;i++)
{
a[i].v.push_back({i-1,0});
a[i-1].v.push_back({i,1});
a[0].v.push_back({i,0});
}
spfa(0);
cout<<dis[n]<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t=1;
while(t--) solve();
return 0;
}