#include #include #include #include #include #include #include #include #define ll long long using namespace std; inline int read(){ int x=0,o=1;char ch=getchar(); while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar(); if(ch=='-')o=-1,ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*o; } const int N=3e5+5; int n,m,x[N],y[N],z[N],lca[N],dep[N]; int f[N][21],d[N][21],cnt[N]; int tot,head[N],nxt[N<<1],to[N<<1],w[N<<1]; inline void add(int a,int b,int c){ nxt[++tot]=head[a];head[a]=tot;to[tot]=b;w[tot]=c; } inline void dfs(int u,int fa){ for(int j=1;j<=20;++j){ f[u][j]=f[f[u][j-1]][j-1]; d[u][j]=d[u][j-1]+d[f[u][j-1]][j-1]; } for(int i=head[u];i;i=nxt[i]){ int v=to[i];if(v==fa)continue; dep[v]=dep[u]+1;f[v][0]=u;d[v][0]=w[i]; dfs(v,u); } } inline int LCA(int x,int y){ if(dep[x]=0;--j)if(dep[f[x][j]]>=dep[y])x=f[x][j]; if(x==y)return x; for(int j=20;j>=0;--j)if(f[x][j]!=f[y][j])x=f[x][j],y=f[y][j]; return f[x][0]; } inline void dp(int u,int fa){ for(int i=head[u];i;i=nxt[i]){ int v=to[i];if(v==fa)continue; dp(v,u);cnt[u]+=cnt[v]; } } inline bool check(int mid){ for(int i=0;i<=n;++i)cnt[i]=0; int num=0; for(int i=1;i<=m;++i){ if(z[i]<=mid)continue; ++cnt[x[i]];++cnt[y[i]];cnt[lca[i]]-=2; ++num; } if(!num)return 1; dp(1,0);int maxn=0; for(int i=1;i<=n;++i) if(cnt[i]==num){ maxn=max(maxn,d[i][0]); } if(!maxn)return 0; for(int i=1;i<=m;++i)if(z[i]-maxn>mid)return 0; return 1; } int main(){ n=read();m=read(); for(int i=1;i=0;--j){ if(k1&(1<>1; if(check(mid))ans=mid,r=mid-1; else l=mid+1; } printf("%d\n",ans); return 0; }