#include <bits/stdc++.h>
using namespace std;
const int N = 1.5e5 + 10;
int n, m;
typedef pair<int, int> PII;
#define mp make_pair
int dist[N];
vector<PII> e[N];
void dijkstra() {
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
priority_queue<PII, vector<PII>, greater<PII> > Q;
Q.push(mp(0, 1));
while(!Q.empty()) {
int u = Q.top().second; Q.pop();
for(unsigned i = 0; i < e[u].size(); i ++ ) {
int v = e[u][i].first, w = e[u][i].second;
if(dist[u] < 1e9 && dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
Q.push(mp(dist[v], v));
}
}
}
}
int main() {
ios::sync_with_stdio(0);
cin >> n >> m;
for(int i = 1; i <= m; i ++ ) {
int u = 0, v = 0, w = 0; cin >> u >> v >> w;
e[u].push_back(mp(v, w));
}
dijkstra();
if(dist[n] < 1e9) cout << dist[n] << endl;
else cout << -1 << endl;
return 0;
}