#include <bits/stdc++.h>
using namespace std;
long long n, m, ans = 0;
queue<long long> func(vector<pair<pair<long long, long long>, long long>> &LRC,
                      vector<long long> &cost, long long i,
                      queue<long long> Q) {
  queue<long long> newQ;
  newQ.push(LRC.at(i).first.second);
  long long t = 1145141919810893;
  while (!Q.empty()) {
    t = Q.front();
    Q.pop();
    if (t < LRC.at(i).first.first) {
      break;
    }
    if (t < LRC.at(i).first.second)
      cost.at(LRC.at(i).first.second) =
          min(cost.at(LRC.at(i).first.second), cost.at(t) + LRC.at(i).second);
    newQ.push(t);
  }
  return newQ;
}
void Main() {
  cin >> n >> m;
  vector<pair<pair<long long, long long>, long long>> LRC(m);
  for (long long i = (0); i < (m); i++) {
    cin >> LRC.at(i).first.first >> LRC.at(i).first.second >> LRC.at(i).second;
    LRC.at(i).first.first--;
    LRC.at(i).first.second--;
    LRC.at(i).first.second *= (-1);
  }
  sort((LRC).begin(), (LRC).end());
  for (long long i = (0); i < (m); i++) {
    LRC.at(i).first.second *= (-1);
  }
  vector<long long> cost(n, 1145141919810893);
  cost[0] = 0;
  queue<long long> Q;
  Q.push(0);
  for (long long i = (0); i < (m); i++) {
    Q = func(LRC, cost, i, Q);
  }
  if (cost.at(n - 1) < 1145141919810893)
    cout << cost.at(n - 1) << endl;
  else
    cout << -1 << endl;
}
int main() {
  Main();
  return 0;
}
