#include <bits/stdc++.h>
using namespace std;
int n, k;
struct dat {
  int s, e, c;
  dat(int S, int E, int C) {
    s = S;
    e = E;
    c = C;
  }
};
vector<dat> v;
struct node {
  int s, e, m;
  long long val, lazy;
  node *l, *r;
  node(int _s, int _e) {
    s = _s, e = _e, m = (s + e) >> 1;
    if (s == e) {
    } else {
      l = new node(s, m);
      r = new node(m + 1, e);
    }
    val = lazy = 1e18;
  }
  void prop() {
    l->val = min(l->val, lazy);
    r->val = min(r->val, lazy);
  }
  long long query(int i) {
    if (s == e)
      return val;
    else {
      prop();
      if (i <= m)
        return l->query(i);
      else
        return r->query(i);
    }
  }
  void update(int i, int j, long long k) {
    if (i == s && j == e) {
      val = min(val, k);
      lazy = min(lazy, k);
      return;
    } else {
      if (j <= m)
        l->update(i, j, k);
      else if (m < i)
        r->update(i, j, k);
      else
        l->update(i, m, k), r->update(m + 1, j, k);
      val = min(l->val, r->val);
    }
  }
} * root;
int main() {
  scanf("%d%d", &n, &k);
  int a, b, c;
  while (k--) {
    scanf("%d%d%d", &a, &b, &c);
    v.push_back(*new dat(a, b, c));
  }
  sort(v.begin(), v.end(), [](dat &i, dat &j) { return i.s < j.s; });
  root = new node(0, n);
  root->update(1, 1, 0);
  for (vector<dat>::iterator it = v.begin(); it != v.end(); it++) {
    root->update((*it).s + 1, (*it).e, root->query((*it).s) + (*it).c);
  }
  printf("%lld\n", root->query(n));
}
