#include<bits/stdc++.h>
#define INF 0x7fffffff
const int N=700010;
using namespace std;
 
inline int read(){
	char ch=getchar();int x=0,f=1;
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
} 
 
struct edge{
	int v,nxt,w;
}e[N*20];
int head[N<<4],cnt;
long long inf;
int n,m,s;
 
void add(int u,int v,int w){
	e[++cnt].v=v;
	e[cnt].w=w;
	e[cnt].nxt=head[u];
	head[u]=cnt;
}
 
int tin[N<<4],tout[N<<4],temp;
long long dis[N<<4];
 
void build(int k,int l,int r){
	if(l==r){
		tin[k]=tout[k]=l;
		return ;
	}
	int mid=(l+r)>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	tin[k]=++temp;tout[k]=++temp;
	add(tout[k<<1],tout[k],0);
	add(tout[k<<1|1],tout[k],0);
	add(tin[k],tin[k<<1],0);
	add(tin[k],tin[k<<1|1],0);
}
 
void update1(int k,int l,int r,int L,int R,int u,int w){
	if(L<=l&&r<=R){
		add(u,tin[k],w);
		return ;
	}
	int mid=(l+r)>>1;
	if(mid>=L){
		update1(k<<1,l,mid,L,R,u,w);
	}
	if(mid<R){
		update1(k<<1|1,mid+1,r,L,R,u,w);
	}
}
 
void update2(int k,int l,int r,int L,int R,int u,int w){
		if(L<=l&&r<=R){
		add(tout[k],u,w);
		return ;
	}
	int mid=(l+r)>>1;
	if(mid>=L){
		update2(k<<1,l,mid,L,R,u,w);
	}
	if(mid<R){
		update2(k<<1|1,mid+1,r,L,R,u,w);
	}
}
 
struct node{
	int u;
	long long d;
	bool operator<(const node&h)const{return d>h.d;};
};
 
void dij(){
	memset(dis,0x3f,sizeof(dis));
	inf=dis[1];
	priority_queue<node> q;
	dis[s]=0;
	q.push((node){s,0});
	while(!q.empty()){
		node now=q.top();
		int u=now.u;
		long long d=now.d;
		q.pop();
		if(d!=dis[u])continue;
		for(int i=head[u];i;i=e[i].nxt){
			int v=e[i].v,w=e[i].w;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				q.push((node){v,dis[v]});
			}
		}
	}
}
 
int main(){
	n=read(),m=read(),s=1;
	temp=n; 
	build(1,1,n);
	for(int i=1;i<=m;i++){
		int l=read(),r=read(),w=read();
		for(int u=l;u<=r;u++){
			if(u+1<=r)
			{
				update1(1,1,n,u+1,r,u,w);
				update2(1,1,n,u+1,r,u,w);
			}
			if(u-1>=l)
			{
				update1(1,1,n,l,u-1,u,w);
				update2(1,1,n,l,u-1,u,w);
			}
		}
	}
	dij(); 
	if(dis[n]!=inf){
		printf("%I64d ",dis[n]);
	}
	else printf("-1 ");
	return 0;
}