#include<bits/stdc++.h>
using namespace std;
int l=INT_MAX,r=INT_MIN,n,m,s,t,ans;
//cost:记录拥挤度
int f[20010],x[20010],y[20010],cost[20010];
//查找
int find(int x){
return x == f[x]?x:f[x]=find(f[x]);
}
//二分函数,看拥挤度在mid的情况下从s到t是否有通路
bool check(int mid){
for(int i = 1;i <= n;i++) f[i] = i;//初始化
//m条路
for(int i = 1;i <= m;i++){
//代价大于mid的通路无效
if(cost[i] > mid) continue;
int fx = find(x[i]),fy = find(y[i]);
//将x[i]和y[i]合并到同一个集合
if(fx != fy){
f[fx] = fy;
}
}
//如果s到t有通路
if(find(s) == find(t)) return true;
else return false;
}
int main(){
cin>>n>>m>>s>>t;
//读入m条路的拥挤度
for(int i = 1;i <= m;i++){
cin>>x[i]>>y[i]>>cost[i];
l = min(l,cost[i]);
r = max(r,cost[i]);
}
//二分拥挤度,找左边界
int mid;
while(l <= r){
mid = (l + r) >> 1;
//如果在拥挤度为mid的情况下有通路,尝试降低mid
if(check(mid)){
r = mid - 1;
}else{
l = mid + 1;
}
}
//输出左边界
cout<<l;
return 0;
}
/**************************************************************
Problem: 1923
User: admin
Language: C++
Result: Accepted
Time:33 ms
Memory:2384 kb
****************************************************************/