#include <bits/stdc++.h>
using namespace std;
vector<pair<int,int> > v[100005];
long long tree[400005];
void update(int node,int st,int en,int l,int r,long long val)
{
	if (en<l || st>r || r<l)
	return;
	if (l<=st && en<=r)
	{
		tree[node]=min(tree[node],val);
		return;
	}
	int mid=(st+en)/2;
	update(2*node,st,mid,l,r,val);
	update(2*node+1,mid+1,en,l,r,val);
}
long long query(int node,int st,int en,int idx)
{
	long long ans=tree[node];
	if (st!=en)
	{
		int mid=(st+en)/2;
		if (st<=idx && idx<=mid)
		ans=min(ans,query(2*node,st,mid,idx));
		else
		ans=min(ans,query(2*node+1,mid+1,en,idx));
	}
	return ans;
}
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	while (m--)
	{
		int l,r,c;
		scanf("%d%d%d",&l,&r,&c);
		v[l].push_back({r,c});
	}
	for (int i=1;i<=4*n;i++)
	tree[i]=1e18;
	update(1,1,n,1,1,0);
	for (int i=1;i<=n;i++)
	{
		long long cur=query(1,1,n,i);
		for (auto p:v[i])
		update(1,1,n,i,p.first,cur+p.second);
	}
	long long ans=query(1,1,n,n);
	if (ans==1e18)
	ans=-1;
	printf("%lld",ans);
}