#include <bits/stdc++.h>
using namespace std;
const int N = 2000;
struct edge{
int v, w;
};
vector<edge> e[N];
int vis[N], d[N], m, n;
void dij(int s) {
memset(d,0x3f,sizeof d);
d[s] = 0;
priority_queue<pair<int, int>> q;
q.push({0, s});
while(q.size()) {
int u = q.top().second; q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(auto ed : e[u]) {
int v = ed.v, w = ed.w;
if(d[v] > d[u] + w) d[v] = d[u] + w;
q.push({-d[v], v});
}
}
}
int main() {
int u, v, w;
cin >> n >> m;
for(int i = 0; i < m; i++) {
cin >> u >> v >> w, e[u].push_back({v, -w});
}
dij(1);
cout << -d[n];
}