#include <bits/stdc++.h>
using namespace std;
const int R=1e4*2+1;
int n,m,s,t,l=1e4+1,r,uni[R];
struct s
{
int u;
int v;
int w;
}arr[R];
int find(int num)
{
if (num==uni[num]) return num;
else return find(uni[num]);
}
bool check(int crowd)
{
for (int i=1;i<=n;i++)
uni[i]=i;
for (int i=1;i<=m;i++)
{
if (arr[i].w<=crowd)
{
uni[find(i)]=find(crowd);
}
}
if (find(s)==find(t))
return true;
return false;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&arr[i].u,&arr[i].v,&arr[i].w);
l=min(l,arr[i].w);
r=max(r,arr[i].w);
}
while (l<=r)
{
int mid=(l+r)/2;
if (check(mid))
r=mid-1;
else
l=mid+1;
}
printf("%d",l);
}