#include<iostream>
#include<cstring>
using namespace std;
const long long N=1e5+5;
const long long C=1e9;
long long n,m;
struct node{
long long u,v,o;
}a[N];
long long f[N];
void td(int i){
if(i>m){
bool pd=0;
for(int j=1;j<=m;j++)
if(min(f[a[j].u],f[a[j].v])!=a[j].o){
pd=1;
break;
}
if(pd!=0) return;
else{
for(int j=1;j<=n;j++) if(f[j]!=0) printf("%d ",f[j]);
exit(0);
}
}
if(f[a[i].u]==0&&f[a[i].v]==0) f[a[i].u]=a[i].o,f[a[i].v]=a[i].o,td(i+1);
else{
long long b;
if(f[a[i].v]>=a[i].o){
b=f[a[i].u];
f[a[i].u]=a[i].o;
td(i+1);
f[a[i].u]=b;
}
if(f[a[i].u]>=a[i].o){
b=f[a[i].v];
f[a[i].v]=a[i].o;
td(i+1);
f[a[i].v]=b;
}
if(a[i].o>f[a[i].v]&&a[i].o>f[a[i].u]){
f[a[i].u]=a[i].o;
f[a[i].v]=a[i].o;
td(i+1);
}
}
return;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) f[i]=C;
for(int i=1;i<=m;i++) scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].o);
td(1);
return 0;
}