#include <bits/stdc++.h>
#define rep(i, l, r) for (register int i = l; i <= r; i++)
#define per(i, r, l) for (register int i = r; i >= l; i--)
#define srep(i, l, r) for (register int i = l; i < r; i++)
#define sper(i, r, l) for (register int i = r; i > l; i--)
#define erep(i, x) for (register int i = h[x]; i; i = e[i].next)
#define ll long long int 
#define maxn 20000019
#define maxm 20000019
using namespace std;

const int inf = 2000000019;

int n, m, s, t, hehe;

struct edge{
	int to, next, len;
	edge(int next, int to, int len) : next(next), to(to), len(len){}
	edge(){}
}e[maxm];
int cnt = 1, h[maxn];
void Add_Edge(int x, int y, int z){
	e[++cnt] = edge(h[x], y, z);
	h[x] = cnt;
}
void init(int l, int r, int o){
	if (o > 1) Add_Edge(o, o >> 1, 0);
	hehe = max(hehe, o);
	if (l == r) {
		if (l == 1) s = o;
		else if (l == n) t = o;
		return;
	}
	int mid = ((r - l) >> 1) + l;
	init(l, mid, o << 1), init(mid + 1, r, o << 1 | 1);
}
int qx, qy, qd, qnode;
int get(int l, int r, int o){
	if (l == r) return o;
	int mid = ((r - l) >> 1) + l;
	if (qy <= mid) return get(l, mid, o << 1);
	else return get(mid + 1, r, o << 1 | 1);
}
void add(int l, int r, int o){
	if (qx <= l && r <= qy){
		Add_Edge(o, qnode, qd);
		return;
	}
	int mid = ((r - l) >> 1) + l;
	if (qx <= mid) add(l, mid, o << 1);
	if (qy > mid) add(mid + 1, r, o << 1 | 1);
}

queue<int> spfa;
ll d[maxn];
bool vis[maxn];
void SPFA(){
	rep(i, 1, hehe) d[i] = (ll)inf * inf;
	d[s] = 0, vis[s] = 1, spfa.push(s);
	while (!spfa.empty()) {
		int x = spfa.front(); spfa.pop();
		erep(i, x){
			int op = e[i].to;
			if (d[op] > d[x] + e[i].len) {
				d[op] = d[x] + e[i].len;
				if (!vis[op]) {
					vis[op] = 1;
					spfa.push(op);
				}
			}
		}
		vis[x] = 0;
	}
}

int main(){
	scanf("%d%d", &n, &m);
	init(1, n, 1);
	//printf("%d %d\n", s, t);
	rep(i, 1, m){
		scanf("%d%d%d", &qx, &qy, &qd);
		qnode = get(1, n, 1);
		//printf("%d\n", qnode);
		add(1, n, 1);
	}
	SPFA();
	//rep(i, 1, t) printf("%d ", d[i]);
	if (d[t] == (ll)inf * inf) printf("-1");
	else printf("%lld", d[t]);
	return 0;
}