#include <bits/stdc++.h>
using namespace std;
class MAP {
 public:
  int N;
  int goal;
  int min = -1;
  int now = 1;
  long long road = 0;
  vector<vector<int> > C;
  vector<vector<int> > next;
  MAP(int _N) {
    N = _N + 1;
    goal = _N;
    vector<int> t(N, 0);
    vector<int> t2;
    for (int i = 0; i < N; i++) {
      C.push_back(t);
      next.push_back(t2);
    }
  }
  void setC(int _L, int _R, int _C) {
    for (int i = _L; i < _R; i++) {
      for (int j = i + 1; j < _R + 1; j++) {
        if (C[i][j] != 0) {
          if (C[i][j] > _C) {
            C[i][j] = _C;
          }
        } else {
          C[i][j] = _C;
          next[i].push_back(j);
        }
      }
    }
  }
};
MAP search(MAP map) {
  int now = map.now;
  int n = map.next[now].size();
  for (int i = 0; i < n; i++) {
    if (map.next[now][i] == map.goal) {
      if (map.min > map.road + map.C[now][map.next[now][i]] || map.min == -1) {
        map.min = map.road + map.C[now][map.next[now][i]];
      }
    }
    map.road += map.C[now][map.next[now][i]];
    map.now = map.next[now][i];
    map = search(map);
    map.now = map.next[now][i];
    map.road -= map.C[now][map.next[now][i]];
  }
  return map;
}
int main() {
  int N, M, _L, _R, _C;
  cin >> N >> M;
  MAP map(N);
  for (int i = 0; i < M; i++) {
    cin >> _L >> _R >> _C;
    map.setC(_L, _R, _C);
  }
  map = search(map);
  cout << map.min << endl;
  return 0;
}
