#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*40];

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;

}