#include<iostream>
#include<queue>
#include<cstring>
#define int long long
using namespace std;
typedef pair<int,int>PII;
const int N=2e5+10;
int n,m;
int h[N],e[N],ne[N],w[N],idx=0;//链式前向星
int dist[N];//原点到各个点的距离,
bool vis[N];
void add(int a,int b,int c)
{
e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
void dijkstra()
{
memset(dist,0x3f3f3f3f,sizeof dist);
priority_queue<PII,vector<PII>,greater<PII> >heap;
heap.push({0,1});//first是距离,second是节点
while(heap.size())
{
auto t=heap.top();
heap.pop();
int ver=t.second,dis=t.first;//节点,距离
if(vis[ver]) continue;
vis[ver]=true;
for(int i=h[ver];i!=-1;i=ne[i])
{
int j=e[i];//与上一条边相连的节点,就是b
if(dist[j]>dist[ver]+w[i])
{
dist[j]=dist[ver]+w[i];
heap.push({dist[j],j});
}
}
}
if(dist[n]==0x3f3f3f3f) cout<<-1<<" ";
else cout<<dist[n]<<" ";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
memset(h,-1,sizeof h);
cin>>n>>m;
while(m--)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);//无向图,需要存双向边
}
dijkstra();
return 0;
}