#include <bits/stdc++.h>
#define ii pair<ll,ll>
#define iii pair<ll,pair<ll,ll>>
#define ll long long
#define file(a) freopen(a".inp","r",stdin);freopen(a".out","w",stdout);
using namespace std;
const int maxn = 1e6+5;
string s;
ll n,m,k,st[4*maxn],lazy[4*maxn],a[maxn],q,dp[maxn];
map<ll,ll> last;
void build(int id = 1, int l = 0, int r = n) {
if (l == r) {
st[id] = (l == 0 ? 0 : 1e18); // dp[0] = 0, dp[i>0] = INF
return;
}
int mid = (l + r) / 2;
build(id*2, l, mid);
build(id*2+1, mid+1, r);
st[id] = min(st[id*2], st[id*2+1]);
}
void down(ll id,ll l,ll r,ll mid)
{
if (lazy[id] != 0)
{
lazy[id*2] = lazy[id];
st[id*2] = lazy[id];
lazy[id*2+1] = lazy[id];
st[id*2+1] = lazy[id];
lazy[id] = 0;
}
}
void update(ll pos, ll val, ll id=1, ll l=1, ll r=n)
{
// [l,r] pos [l,r]
if (pos < l || r < pos) return;
if (l == r)
{
st[id] = val;
lazy[id] = val;
return;
}
ll mid = (l+r) >> 1;
// down(id,l,r,mid);
update(pos,val,id*2,l,mid);
update(pos,val,id*2+1,mid+1,r);
st[id] = min(st[id*2] , st[id*2+1]);
}
ll get(ll u, ll v,ll id=1,ll l=1, ll r=n)
{
if (u > r || v < l) return 1e18;
if (u <= l && r <= v) return st[id];
ll mid = (l+r) >> 1;
// down(id,l,r,mid);
return min(get(u,v,id*2,l,mid) , get(u,v,id*2+1,mid+1,r));
}
// cần tìm st[id] < l bên trái nhất là do cần tìm giá trị nhỏ nhất
ll walkleft(ll u, ll v, ll k,ll id=1,ll l=1,ll r=n)
{
// ST[ID] vẫn còn trong đoạn l,r
if (v < l || u > r || st[id] >= k) return -1;
if (l == r) return l;
ll mid = (l+r) >> 1;
ll ret = walkleft(u,v,k,id*2,l,mid);
if (ret == -1) ret = walkleft(u,v,k,id*2+1,mid+1,r);
return ret;
}
struct query
{
ll l,r,c;
}Q[maxn];
bool cmp(query x, query y)
{
return x.r < y.r;
}
main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
file("test");
cin >> n >> q;
for (int i=1;i<=q;i++) cin >> Q[i].l >> Q[i].r >> Q[i].c;
build();
// for (int i=1;i<=n;i++) update(i,1e18);
// update(0,1e18);
sort(Q + 1, Q + q + 1, cmp);
for (auto p:Q) {
ll l = p.l;
ll r = p.r;
ll c = p.c;
for (ll j = l; j <= r; j++)
{
ll cur = get(j, j);
ll best = get(l - 1, j - 1); // lấy dp[j] với j trong [l-1, j-1]
if (best + c < cur) {
update(j, best + c);
}
}
}
ll ans = get(n,n);
if (ans != 1e18) cout << ans;
else cout << -1;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaWkgcGFpcjxsbCxsbD4KI2RlZmluZSBpaWkgcGFpcjxsbCxwYWlyPGxsLGxsPj4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBmaWxlKGEpIGZyZW9wZW4oYSIuaW5wIiwiciIsc3RkaW4pO2ZyZW9wZW4oYSIub3V0IiwidyIsc3Rkb3V0KTsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IG1heG4gPSAxZTYrNTsKc3RyaW5nIHM7CmxsIG4sbSxrLHN0WzQqbWF4bl0sbGF6eVs0Km1heG5dLGFbbWF4bl0scSxkcFttYXhuXTsKbWFwPGxsLGxsPiBsYXN0Owp2b2lkIGJ1aWxkKGludCBpZCA9IDEsIGludCBsID0gMCwgaW50IHIgPSBuKSB7CiAgICBpZiAobCA9PSByKSB7CiAgICAgICAgc3RbaWRdID0gKGwgPT0gMCA/IDAgOiAxZTE4KTsgLy8gZHBbMF0gPSAwLCBkcFtpPjBdID0gSU5GCiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgYnVpbGQoaWQqMiwgbCwgbWlkKTsKICAgIGJ1aWxkKGlkKjIrMSwgbWlkKzEsIHIpOwogICAgc3RbaWRdID0gbWluKHN0W2lkKjJdLCBzdFtpZCoyKzFdKTsKfQp2b2lkIGRvd24obGwgaWQsbGwgbCxsbCByLGxsIG1pZCkKewogICAgaWYgKGxhenlbaWRdICE9IDApCiAgICB7CiAgICAgICAgbGF6eVtpZCoyXSA9IGxhenlbaWRdOwogICAgICAgIHN0W2lkKjJdID0gbGF6eVtpZF07CgogICAgICAgIGxhenlbaWQqMisxXSA9IGxhenlbaWRdOwogICAgICAgIHN0W2lkKjIrMV0gPSBsYXp5W2lkXTsKCiAgICAgICAgbGF6eVtpZF0gPSAwOwogICAgfQp9CnZvaWQgdXBkYXRlKGxsIHBvcywgbGwgdmFsLCBsbCBpZD0xLCBsbCBsPTEsIGxsIHI9bikKewogICAgLy8gW2wscl0gcG9zIFtsLHJdCiAgICBpZiAocG9zIDwgbCB8fCByIDwgcG9zKSByZXR1cm47CiAgICBpZiAobCA9PSByKQogICAgewogICAgICAgIHN0W2lkXSA9IHZhbDsKICAgICAgICBsYXp5W2lkXSA9IHZhbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbGwgbWlkID0gKGwrcikgPj4gMTsKICAgIC8vIGRvd24oaWQsbCxyLG1pZCk7CiAgICB1cGRhdGUocG9zLHZhbCxpZCoyLGwsbWlkKTsKICAgIHVwZGF0ZShwb3MsdmFsLGlkKjIrMSxtaWQrMSxyKTsKICAgIHN0W2lkXSA9IG1pbihzdFtpZCoyXSAsIHN0W2lkKjIrMV0pOwp9CmxsIGdldChsbCB1LCBsbCB2LGxsIGlkPTEsbGwgbD0xLCBsbCByPW4pCnsKICAgIGlmICh1ID4gciB8fCB2IDwgbCkgcmV0dXJuIDFlMTg7CiAgICBpZiAodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHN0W2lkXTsKICAgIGxsIG1pZCA9IChsK3IpID4+IDE7CiAgICAvLyBkb3duKGlkLGwscixtaWQpOwogICAgcmV0dXJuIG1pbihnZXQodSx2LGlkKjIsbCxtaWQpICwgZ2V0KHUsdixpZCoyKzEsbWlkKzEscikpOwp9CgovLyBj4bqnbiB0w6xtIHN0W2lkXSA8IGwgYsOqbiB0csOhaSBuaOG6pXQgbMOgIGRvIGPhuqduIHTDrG0gZ2nDoSB0cuG7iyBuaOG7jyBuaOG6pXQKbGwgd2Fsa2xlZnQobGwgdSwgbGwgdiwgbGwgayxsbCBpZD0xLGxsIGw9MSxsbCByPW4pCnsKICAgIC8vIFNUW0lEXSB24bqrbiBjw7JuIHRyb25nIMSRb+G6oW4gbCxyCiAgICBpZiAodiA8IGwgfHwgdSA+IHIgfHwgc3RbaWRdID49IGspIHJldHVybiAtMTsKICAgIGlmIChsID09IHIpIHJldHVybiBsOwogICAgbGwgbWlkID0gKGwrcikgPj4gMTsKICAgIGxsIHJldCA9IHdhbGtsZWZ0KHUsdixrLGlkKjIsbCxtaWQpOwogICAgaWYgKHJldCA9PSAtMSkgcmV0ID0gd2Fsa2xlZnQodSx2LGssaWQqMisxLG1pZCsxLHIpOwogICAgcmV0dXJuIHJldDsgCn0KCnN0cnVjdCBxdWVyeQp7CiAgICBsbCBsLHIsYzsKfVFbbWF4bl07CmJvb2wgY21wKHF1ZXJ5IHgsIHF1ZXJ5IHkpCnsKICAgIHJldHVybiB4LnIgPCB5LnI7Cn0KbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGZpbGUoInRlc3QiKTsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IgKGludCBpPTE7aTw9cTtpKyspIGNpbiA+PiBRW2ldLmwgPj4gUVtpXS5yID4+IFFbaV0uYzsKICAgIGJ1aWxkKCk7CiAgICAvLyBmb3IgKGludCBpPTE7aTw9bjtpKyspIHVwZGF0ZShpLDFlMTgpOwogICAgLy8gdXBkYXRlKDAsMWUxOCk7CiAgICBzb3J0KFEgKyAxLCBRICsgcSArIDEsIGNtcCk7CgogICAgZm9yIChhdXRvIHA6USkgewogICAgICAgIGxsIGwgPSBwLmw7CiAgICAgICAgbGwgciA9IHAucjsKICAgICAgICBsbCBjID0gcC5jOwoKICAgICAgICBmb3IgKGxsIGogPSBsOyBqIDw9IHI7IGorKykgCiAgICAgICAgewogICAgICAgICAgICBsbCBjdXIgPSBnZXQoaiwgaik7CiAgICAgICAgICAgIGxsIGJlc3QgPSBnZXQobCAtIDEsIGogLSAxKTsgLy8gbOG6pXkgZHBbal0gduG7m2kgaiB0cm9uZyBbbC0xLCBqLTFdCiAgICAgICAgICAgIGlmIChiZXN0ICsgYyA8IGN1cikgewogICAgICAgICAgICAgICAgdXBkYXRlKGosIGJlc3QgKyBjKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gICAKICAgIGxsIGFucyA9IGdldChuLG4pOwogICAgaWYgKGFucyAhPSAxZTE4KSBjb3V0IDw8IGFuczsKICAgIGVsc2UgY291dCA8PCAtMTsKICAgIAogICAgcmV0dXJuIDA7Cn0=