#include
#include
#include
#include
#include
using namespace std;
int n;
int m;
int s;
int t;
int f[20000];
struct Edge{
int u;
int v;
int w;
bool operator < (const Edge &x)const{
return w<x.w ;
}
}edge[20000];
int find(int x){
if(f[x]==x) return x;
else return f[x]=find(f[x]);
}
int main()
{
cin>>n;
cin>>m;
cin>>s;
cin>>t;
for(register int i;i<=m;i++){
cin>>edge[i].u;
cin>>edge[i].v;
cin>>edge[i].w;
}
for(int i=1;i<=n;i++){
f[i]=i;
}
sort(edge+1,edge+1+m);
for(int i=1;i<=m;i++){
int ui=edge[i].u ;
int vi=edge[i].v ;
int wi=edge[i].w ;
if(find(ui)!=find(vi)){
f[find(vi)]=find(ui);
if(find(s)==find(t)){
cout<<wi;
return 0;
}
}
}
return 0;
}