#include<bits/stdc++.h>
using namespace std;
int n,m,e,s,t;
struct line{
int from,to,len;
line(){};
line(int A,int B,int C)
{
from=A;
to=B;
len=C;
}
}edge[20005];
int last[20005],next[20005];
void add(int x,int y,int z)
{
edge[++e]=line(x,y,z);
next[e]=last[x];
last[x]=e;
}
queue<int>q;
int dis[20005];
bool vis[20005];
int main()
{
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
memset(dis,0x3f3f3f,sizeof(dis));
dis[s]=0;vis[s]=false;q.push(s);
while(q.size())
{
int x=q.front();
q.pop();
vis[x]=false;
for(int i=last[x];i;i=next[i])
{
int y=edge[i].to;
int dist=max(dis[x],edge[i].len);
if(dis[y]>dist)
{
dis[y]=dist;
if(vis[y]==false)
{
vis[y]=true;
q.push(y);
}
}
}
}
cout<<dis[t];
return 0;
}