#include<bits/stdc++.h>
using namespace std;
struct bian
{
int nxt,to,zhi;
}b[200001];
int dian[20002],tot,co[20002];
int n,m,maxv;
bool cmp(bian x,bian y)
{
return x.zhi<y.zhi;
}
inline void add(int x,int y,int z)
{
b[++tot].nxt=dian[x];
b[tot].to=y;
b[tot].zhi=z;
dian[x]=tot;
}
bool dfs(int x,int fa,int c,int s)
{
co[x]=c;
for(int i=dian[x];i;i=b[i].nxt)
{
if(b[i].zhi<s) continue;
if(co[b[i].to]){
if(co[b[i].to]==c) return false;
}
else if(!dfs(b[i].to,x,c%2+1,s))
{
return false;
}
}
return true;
}
inline bool check(int x)
{
memset(co,0,sizeof(co));
for(int i=1;i<=n;i++)
{
if(!co[i])
{
if(!dfs(i,0,1,x)) return false;
}
}
return true;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
maxv=max(maxv,z);
}
int l=1,r=maxv;
while(l<r)
{
int mid=(l+r)>>1;
if(!check(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}
```cpp