#include <bits/stdc++.h>
using namespace std;
int M = 1;
long long int INF = 1000000000000000000;
std::vector<long long int> seg;
void init(long long int N) {
  while (M < N) M *= 2;
  M = M * 2 - 1;
  for (int i = 0; i < M; i++) {
    seg.push_back(INF);
  }
}
void update(long long int a, long long int b, long long int l, long long int r,
            long long int x, long long int k) {
  if (r <= a || b <= l) return;
  if (a <= l && r <= b) {
    seg[k] = min(seg[k], x);
    return;
  }
  update(a, b, l, (l + r) / 2, x, k * 2 + 1);
  update(a, b, (l + r) / 2, r, x, k * 2 + 2);
}
long long int query(long long int a, long long int b, long long int l,
                    long long int r, long long int k) {
  if (r <= a || b <= l) return INF;
  long long int tmp = seg[k];
  if (k >= M / 2) return tmp;
  long long int A = query(a, b, l, (l + r) / 2, k * 2 + 1);
  long long int B = query(a, b, (l + r) / 2, r, k * 2 + 2);
  return min({tmp, A, B});
}
int main(int argc, char const *argv[]) {
  long long int N, m;
  std::cin >> N >> m;
  init(N + 1);
  vector<vector<long long int> > data =
      vector<vector<long long int> >(m, vector<long long int>(3, 0));
  for (int i = 0; i < m; i++)
    std::cin >> data[i][0] >> data[i][1] >> data[i][2];
  sort(data.begin(), data.end());
  update(1, 2, 0, (M + 1) / 2, 0, 0);
  for (int i = 0; i < m; i++) {
    long long int l = data[i][0], r = data[i][1], c = data[i][2];
    long long int t = query(l, r + 1, 0, (M + 1) / 2, 0);
    update(l, r + 1, 0, (M + 1) / 2, t + c, 0);
  }
  long long int ans = query(N, N + 1, 0, (M + 1) / 2, 0);
  std::cout << (ans == INF ? -1 : ans) << '\n';
  return 0;
}
