#include <bits/stdc++.h>
using namespace std;
long long int dp[100001];
int n, m;
const long long int INF = 1e18;
struct line {
  int l, r, c;
};
vector<line> l;
bool cmp(line a, line b) {
  if (a.l == b.l) {
    return a.r < b.r;
  }
  return a.l < b.l;
}
int main(void) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  line t;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> t.l >> t.r >> t.c;
    l.push_back(t);
  }
  fill(dp, dp + 100001, INF);
  sort(l.begin(), l.end(), cmp);
  multiset<long long int> S;
  priority_queue<pair<int, int>, vector<pair<int, int>>,
                 greater<pair<int, int>>>
      pque;
  for (int i = 0; i < m; i++) {
    while (!pque.empty()) {
      if (pque.top().first < l[i].l) {
        S.erase(dp[pque.top().second]);
        pque.pop();
      } else {
        break;
      }
    }
    if (l[i].l == 1) {
      dp[i] = l[i].c;
      S.insert(dp[i]);
      pque.push(make_pair(l[i].r, i));
    } else {
      if (S.size() != 0) {
        dp[i] = min(dp[i], *S.begin() + l[i].c);
        S.insert(dp[i]);
        pque.push(make_pair(l[i].r, i));
      }
    }
  }
  long long int res = INF;
  for (int i = 0; i < m; i++) {
    if (l[i].r == n) {
      res = min(res, dp[i]);
    }
  }
  if (res == INF) {
    res = -1;
  }
  cout << res << '\n';
  return 0;
}
