#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, m;
long long t[N << 2], lz[N << 2];
vector<pair<int, int> > v[N];
void build(int l, int r, int k) {
  t[k] = lz[k] = 1e18;
  if (l == r && l == 1) t[k] = 0;
  if (l == r) return;
  int m = l + r >> 1;
  build(l, m, k << 1);
  build(m + 1, r, k << 1 | 1);
}
void update(int k) {
  t[k << 1] = min(t[k << 1], lz[k]);
  t[k << 1 | 1] = min(t[k << 1 | 1], lz[k]);
  lz[k << 1] = min(lz[k << 1], lz[k]);
  lz[k << 1 | 1] = min(lz[k << 1 | 1], lz[k]);
  lz[k] = 1e18;
}
long long query(int l, int r, int k, int x) {
  if (l != r) update(k);
  if (l == r) return t[k];
  int m = l + r >> 1;
  if (x <= m)
    return query(l, m, k << 1, x);
  else
    return query(m + 1, r, k << 1 | 1, x);
}
void fix(int l, int r, int k, int x, int y, long long v) {
  if (r < x || l > y) return;
  if (l != r) update(k);
  if (l >= x && r <= y) {
    t[k] = min(t[k], v);
    lz[k] = min(lz[k], v);
    update(k);
    return;
  }
  int m = l + r >> 1;
  fix(l, m, k << 1, x, y, v);
  fix(m + 1, r, k << 1 | 1, x, y, v);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int l, r, c;
    scanf("%d%d%d", &l, &r, &c);
    v[l].push_back({r, c});
  }
  build(1, n, 1);
  for (int i = 1; i <= n; i++) {
    long long mn = query(1, n, 1, i);
    for (int j = 0; j < v[i].size(); j++)
      fix(1, n, 1, i, v[i][j].first, mn + v[i][j].second);
  }
  long long ans = query(1, n, 1, n);
  if (ans == 1e18) ans = -1;
  printf("%lld\n", ans);
}
