#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e5 + 10;
int n,m,idx=1,head[MAXN << 1],dis[MAXN << 1];
bool vis[MAXN << 1];
struct node{
int v,w,nxt;
}edge[MAXN << 1];
inline void add(int u,int v,int w){
edge[idx].v = v;
edge[idx].w = w;
edge[idx].nxt = head[u];
head[u] = idx ++;
}
inline void spfa(){
queue<int>q;
dis[1] = 0;
q.push(1);
while(!q.empty()){
int u = q.front();
q.pop();
for(int i=head[u];i!=-1;i=edge[i].nxt){
int v = edge[i].v,w = edge[i].w;
if(dis[v] > dis[u] + w){
dis[v] = dis[u] + w;
if(!vis[v]){
vis[v] = 1;
q.push(v);
}
}
}
}
}
signed main(){
memset(dis,0x3f,sizeof dis);
memset(head,-1,sizeof head);
scanf("%lld%lld",&n,&m);
const int Inf = dis[1];
for(int i=1;i<=m;i++){
int l,r,c;
scanf("%lld%lld%lld",&l,&r,&c);
add(l,r,c);
}
for(int i=n;i>1;i--)
add(i,i-1,0);
spfa();
if(dis[n] == Inf)
printf("-1\n");
else
printf("%lld\n",dis[n]);
return 0;
}