#pragma comment(linker, "/STACK:102400000,102400000") #include #include #include #include #define N 110000 using namespace std; typedef long long ll; int n,next[N<<1],to[N<<1],head[N],ce; int du[N]; ll L[N],R[N]; int v[N]; queueq; bool yezi[N]; void add(int x,int y) { to[++ce]=y; next[ce]=head[x]; head[x]=ce; } bool judge(int mid) { memset(du,0,sizeof(int)*(n+1)); memset(L,0,sizeof(ll)*(n+1)); memset(R,0x3f,sizeof(ll)*(n+1)); int i,x,cnt=0; for(i=1;i<=ce;i++) du[to[i]]++; while(!q.empty()) q.pop(); for(i=1;i<=n;i++) if(du[i]==1) { q.push(i); if(v[i]!=0) L[i]=v[i],R[i]=v[i]; } while(!q.empty()) { x=q.front(),q.pop(); L[x]=max(L[x],1ll); if(L[x]>R[x]) return 0; for(i=head[x];i;i=next[i]) { if(du[to[i]]>=1&&!yezi[to[i]]) { ll l=L[x]-mid,r=R[x]+mid; L[to[i]]=max(L[to[i]],l); R[to[i]]=min(R[to[i]],r); du[to[i]]--; if(du[to[i]]<=1) q.push(to[i]); } } } return 1; } int main() { int c,T,m,i,j,k,x,y; int l,r,mid; scanf("%d",&T); for(c=1;c<=T;c++) { scanf("%d%d",&n,&m); memset(v,0,sizeof(int)*(n+1)); memset(du,0,sizeof(int)*(n+1)); memset(yezi,0,sizeof(bool)*(n+1)); memset(head,0,sizeof(int)*(n+1)); ce=0; for(i=1;i>1; if(judge(mid)) r=mid-1; else l=mid+1; } printf("%d\n",l); } return 0; }