#include<bits/stdc++.h>
using namespace std;
struct edge{
int sta,ed,val,jump;
}a[1000005];
int n,m,jump[1000005],tot,line[1000005],point[1000005],judge[1000005];
void add(int sta,int ed,int val){
tot++;
a[tot].sta=sta;
a[tot].ed=ed;
a[tot].val=val;
a[tot].jump=jump[sta];
jump[sta]=tot;
}
void SPFA(int epos){
int head=0,tail=1,pos;
line[1]=epos;
while(head!=tail){
head++;
if (head>1000000) head=1;
pos=line[head];
for (int i=jump[pos]; i; i=a[i].jump){
if (point[pos]+a[i].val<point[a[i].ed]){
point[a[i].ed]=point[pos]+a[i].val;
if (!judge[a[i].ed]){
judge[a[i].ed]=1;
tail++;
if (tail>1000000) tail=1;
line[tail]=a[i].ed;
if (point[line[head+1]]>point[line[tail]]) swap(line[head+1],line[tail]);
}
}
}
judge[pos]=0;
}
}
int main(){
memset(point,127,sizeof(point));
scanf("%d%d",&n,&m);
for (int i=1,x,y,z; i<=m; i++){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
SPFA(1);
return 0;
}