#include <bits/stdc++.h>


using namespace std;
#define rep(i,n) for (int i = 0; i < (int)(n); ++i)
#define reps(i,n) for (int i = 1; i <= (int)(n); ++i)
#define repd(i,n) for (int i = (int)(n - 1); i >= 0; --i)
#define repds(i,n) for (int i = (int)(n); i > 0; --i)
#define loop(i,x,n) for (int i = (int)(x); i < (n); ++i)
#define loops(i,x,n) for (int i = (int)(x); i <= (n); ++i)
#define loopd(i,x,n) for (int i = (int)(x); i > (n); --i)
#define loopds(i,x,n) for (int i = (int)(x); i >= (n); --i)
#define itrep(i,s) for (auto i = begin(s); i != end(s); ++i)
#define itrepd(i,s) for (auto i = --end(s); i != begin(s); --i)
#define all(f,x,...) [&](decltype(x)& whole) { return (f)(begin(whole), end(whole), ##__VA_ARGS__); }(x)
#define rall(f,x,...) [&](decltype(x)& whole) { return (f)(rbegin(whole), rend(whole), ##__VA_ARGS__); }(x)
using ll = long long;
using ld = long double;
constexpr ll inf = static_cast<ll>(1e17);
constexpr int iinf = static_cast<int>(1e9);
constexpr double dinf = 1e10;
constexpr ld ldinf = 1e17;
ll mod = static_cast<ll>(1e9 + 7);
std::ostream& endn(std::ostream& os) { return os.put(os.widen('\n')); }
template<class T> constexpr int sz(const T& a) { return (int)a.size(); }
template<class T, class ... Args> constexpr T mins(T& a, Args... args) { return a = min<T>({ a, args... }); }
template<class T, class... Args> constexpr T maxs(T& a, Args... args) { return a = max<T>({ a,args... }); }

int n, m;
vector<pair<int, ll>> g[100005];
ll d[100005];
void solve() {
    cin >> n >> m;

    rep(i, n - 1) g[i + 1].emplace_back(i, 0);

    rep(i, m) {
        int l, r; ll c; cin >> l >> r >> c; --l; --r;

        g[l].emplace_back(r, c);
    }

    fill(d, d + n, inf);

    priority_queue<pair<ll, int>, greater<>> que;
    que.emplace(0LL, 0);
    d[0] = 0;
    while (!que.empty()) {
        auto p = que.top(); que.pop();
        auto v = p.second;

        if (d[v] < p.first) continue;

        rep(i, g[v].size()) {
            auto e = g[v][i];
            if (d[v] + e.second < d[e.first]) {
                d[e.first] = d[v] + e.second;
                que.emplace(d[e.first], e.first);
            }
        }
    }

    if (d[n - 1] != inf)
        cout << d[n - 1] << endn;
    else
        cout << -1 << endn;

}

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(15);
    solve();
    cout << flush;
    return 0;
}
