#include<cstdio>
#define HH puts("")
#define debug puts("haochiyu!")
#define rep(i, a, n) for (int i = a; i <= n; ++i)
#define per(i, a, n) for (int i = a; i >= n; --i)
namespace io {
	#define N 207
	#define mt long long
	#define in read()
	#define pc putchar
	#define gc getchar()
	#define outk(a) out(a), pc(' ')
	#define outn(a) out(a), pc('\n')
	inline mt read() {
		mt a = 0; char l = ' ', c = gc;
		while (c < '0' || c > '9') l = c, c = gc;
		while (c >= '0' && c <= '9') a = (a << 3) + (a << 1) + (c ^ 48), c = gc;
		return l == '-' ? -a : a;
	} char F[N];
	inline void out(mt a) {
		if (a == 0) {pc('0'); return;}
		if (a < 0) pc('-');
		mt tmp = a < 0 ? -a : a, cnt = 0;
		while (tmp) F[cnt++] = tmp % 10 + '0', tmp /= 10;
		while (cnt) pc(F[--cnt]); return;
	}
	#undef N
	#undef mt
}
using namespace io;
const int inf = 0x3f3f3f3f;
typedef long long ll;

void judge() {
	freopen(".in", "r", stdin);
	freopen(".out", "w", stdout);
}

const int N = 2000000 + 7;
int n = in, m = in, head[N << 2], dis[N << 2], cnt;
struct node {int nxt, to, w;} e[N << 2];
void add(int frm, int to, int w) {
	e[++cnt].nxt = head[frm];
	e[cnt].to = to;
	e[cnt].w = w;
	head[frm] = cnt;
} bool vis[N << 2];
#include<queue>
#include<map>
#include<vector>
#define mp std::make_pair
#define fi first
#define sc second
std::priority_queue<int, std::vector<std::pair<int, int> >, std::greater<std::pair<int, int> > > q;
void dijkstra() {
	for (int i = 1; i <= n; ++i) dis[i] = inf, vis[i] = 0;
	q.push(mp(0, 1)); dis[1] = 0; 
	while (q.size()) {
		int u = q.top().sc; q.pop();
		if (vis[u]) continue; vis[u] = 1;
		for (int i = head[u]; i; i = e[i].nxt) {
			int v = e[i].to; if (vis[v]) continue;
			if (dis[v] > dis[u] + e[i].w) {
				dis[v] = dis[u] + e[i].w;
				q.push(mp(dis[v], v));
			}
		}
	}
}

int main() {
//	judge();
	for (int i = 1; i <= m; ++i) { 
		bool flag = 0;
		int l = in, r = in, w = in;
		for (int j = l; j <= n; ++j) { 
			for (int k = r; k >= 1; --k) {
				if (j == k) {flag = 1; break;}
				add(j, k, w); add(k, j, w);
			} if (flag) break;
		}
	} dijkstra(); out(dis[n] == inf ? -1 : dis[n]);
	return 0;
}


