#include <bits/stdc++.h>
#define Xp 100010
using namespace std;
ifstream f("revolta.in");
ofstream g("revolta.out");
vector<int> G[Xp];
int l[Xp],bestnod;
int v[Xp],best[Xp],down[Xp];
bool mark[Xp];
int dL[Xp],cL[Xp],diL[Xp],bestR[Xp],dR[Xp],cR[Xp],diR[Xp],bestL[Xp];
void DFS(int nod){
int i,sf=G[nod].size();
if(l[nod]>l[bestnod])
bestnod=nod;
for(i=0;i<sf;i++)
if(!l[G[nod][i]]){
l[G[nod][i]]=l[nod]+1;
DFS(G[nod][i]);
}
}
int maxi(int a,int b){
return a<b?b:a;
}
int mini(int a,int b){
return a>b?b:a;
}
void DFSDown(int nod,int father){
int i,sf=G[nod].size();
best[nod]=1;
for(i=0;i<sf;i++)
if(!mark[G[nod][i]]&&G[nod][i]!=father){
DFSDown(G[nod][i],nod);
best[nod]=maxi(best[nod],best[G[nod][i]]+1);
}
}
int main(){
int t,n,i,x,y,first,second,cur,nod,d,curc,sol,lol;
f>>t;
while(t--)
{
f>>n;
for(i=1;i<=n;i++) G[i].clear();
for(i=1;i<n;i++){
f>>x>>y;
x++;
y++;
G[x].push_back(y);
G[y].push_back(x);
}
memset(l,0,sizeof l);
l[1]=1;
bestnod=0;
DFS(1);
first=bestnod;
memset(l,0,sizeof l);
l[bestnod]=1;
bestnod=0;
DFS(first);
second=bestnod;
nod=second;
cur=0;
memset(mark,0,sizeof mark);
while(l[nod]!=1){
cur++;
mark[nod]=1;
v[cur]=nod;
for(i=0,lol=G[nod].size();i<lol;i++)
if(l[G[nod][i]]==l[nod]-1){
nod=G[nod][i];
break;
}
}
mark[nod]=1;
cur++;
v[cur]=nod;
d=cur;
for(i=1;i<=d;i++){
DFSDown(v[i],0);
down[i]=best[v[i]]-1;
}
dL[1]=0;
cL[1]=1;
diL[1]=0;
bestR[1]=0;
for(i=2;i<=d;i++){
dL[i]=maxi(dL[i-1],i-1+down[i]);
curc=cL[i-1];
if(i-curc+down[i]<=bestR[i-1]){
cL[i]=cL[i-1];
diL[i]=diL[i-1];
bestR[i]=bestR[i-1];
}
else{
while(i-curc+down[i]>curc-1)
curc++;
cL[i]=curc;
diL[i]=maxi(curc-1,i-curc+down[i]);
bestR[i]=i-curc+down[i];
}
}
dR[d]=0;
cR[d]=d;
diR[d]=0;
bestL[d]=0;
for(i=d-1;i>=1;i--){
dR[i]=maxi(dR[i+1],d-i+down[i]);
curc=cR[i+1];
if(curc-i+down[i]<=bestL[i-1]){
cR[i]=cR[i-1];
diR[i]=diR[i-1];
bestL[i]=bestL[i-1];
}
else{
while(curc-i+down[i]>d-curc)
curc--;
cR[i]=curc;
diR[i]=maxi(d-curc,curc-i+down[i]);
bestR[i]=curc-i+down[i];
}
}
sol=d;
for(i=1;i<d;i++)
sol=mini(sol,maxi(maxi(dL[i],dR[i+1]),diL[i]+diR[i+1]+1));
g<<sol<<'\n';
}
return 0;
}