#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
const int mod = (int) 1e9+7;
int n,m,dist[200005],head[200005],vis[200005],now;
struct edge{
int to,next,val;
}e[20000005];
void init(int x,int y,int v){
e[++now].to=y,e[now].val=v,e[now].next=head[x],head[x]=now;
e[++now].to=x,e[now].val=v,e[now].next=head[y],head[y]=now;
}
struct node{
int id,val;
node(int id,int val):id(id),val(val){}
bool operator < (const node &x)const{
return val > x.val;
}
};
priority_queue<node> q;
void dij(int x){
dist[x]=0;
q.push(node(x,0));
while(!q.empty()){
int u=q.top().id;
q.pop();
vis[u]=1;
for(int i=head[u];~i;i=e[i].next){
int v=e[i].to;
if(vis[v])continue;
if(dist[v]-e[i].val>dist[u]){
dist[v]=dist[u]+e[i].val;
q.push(node(v,dist[v]));
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
memset(dist,125,sizeof(dist));
memset(head,-1,sizeof(head));
memset(vis,0,sizeof(vis));
now=0;
int x,y,z;
for(int i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&z);
init(x,y,z);
}
dij(1);
if(dist[n]>mod)printf("qwb baka\n");
else printf("%d\n",dist[n]);
return 0;
}
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
#include<vector>
#define N 200009
#define ll long long
#define pill pair<int,int>
#define pb push_back
#define mk make_pair
using namespace std;
ll read(){ ll ans=0; char last=' ',ch=getchar();
while(ch<'0' || ch>'9')last=ch,ch=getchar();
while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
if(last=='-')ans=-ans; return ans;}
vector<pill> v[N];
priority_queue<pill,vector<pill>,greater<pill> >Q;
int vis[N];
int dist[N];
int main(){
memset(dist,125,sizeof(dist));
int n=read(),m=read();
for(int i=1;i<=m;i++){
int a=read(),b=read(),c=read();
v[a].pb(mk(b,c));v[b].pb(mk(a,c));
}
Q.push(mk(0,1));dist[1]=0;
while(!Q.empty()){
int j=Q.top().second;Q.pop();
if(vis[j])continue;vis[j]=1;
for(int i=0;i<v[j].size();i++){
if(vis[v[j][i].first])continue;
if(dist[v[j][i].first]>dist[j]+v[j][i].second){
dist[v[j][i].first]=dist[j]+v[j][i].second;
Q.push(mk(dist[v[j][i].first],v[j][i].first));
}
}
}
printf("%d\n",dist[n]);
}