#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N = 1e6+100;
struct node{
    int id;
    ll len;
};
ll dis[N];
vector<pair<int,ll> > G[N];
bool operator<(node a,node b){
    return a.len>b.len;
}
bool vis[N];
priority_queue<node> q;
int n,m;
void dij(int s){
    for(int i=1;i<=n;i++) dis[i]=(1e18);
    memset(vis,0,sizeof(vis));
    dis[s]=0;
    q.push({s,0});
    while(!q.empty()){
        node rt=q.top();q.pop();
        int u=rt.id;
        if(vis[u]) continue;
        vis[u]=1;
        for(auto V:G[u]){
            int v=V.first;
            ll w=V.second;
            if(dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
            }
            q.push({v,dis[v]});
        }
    }
}
int main(){
    cin>>n>>m;
    ll u,v,w;
    for(int i=2;i<=n;i++) G[i].push_back({i-1,0});
    for(int i=1;i<=m;i++){
        cin>>u>>v>>w;
        G[u].push_back({v,w});
    }
    dij(1);
    if(dis[n]==(1e18)){
        cout<<-1<<endl;
    }else{
        cout<<dis[n]<<endl;
    }
    return 0;
}