#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e5 + 5;
const long long INF = 1e18;
const long long MOD = 1e9 + 7;
long long gcd(long long a, long long b) { return !b ? a : gcd(b, a % b); }
long long sq(long long x) { return (x * x) % MOD; }
long long modP(long long a, long long b) {
  return (!b ? 1 : (sq(modP(a, b / 2)) * (b % 2 ? a : 1)) % MOD);
}
vector<pair<int, int> > G[maxN];
int cnt[maxN], dis[maxN];
set<pair<int, int> > S;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  memset(dis, 63, sizeof dis);
  int n, m;
  cin >> n >> m;
  while (m--) {
    int l, r, c;
    cin >> l >> r >> c;
    G[l].push_back({r, c});
    cnt[r++]--;
    cnt[l--]++;
  }
  for (int i = 0; i < n; i++) {
    cnt[i + 1] += cnt[i];
    if (cnt[i + 1] > 0) G[i + 1].push_back({i, 0});
  }
  dis[1] = 0;
  S.insert({0, 1});
  while (!S.empty()) {
    int v = (*S.begin()).second;
    S.erase(S.begin());
    for (auto pp : G[v]) {
      int u = pp.first;
      int w = pp.second;
      if (dis[u] > dis[v] + w) {
        dis[u] = dis[v] + w;
        S.insert({dis[u], u});
      }
    }
  }
  cout << (dis[n] > MOD ? -1 : dis[n]) << endl;
  return 0;
}
