int ask(int u, int v)
{
if (dfn[u] > dfn[v]) swap(u, v);
if (u == v) return u;
for (register int i = t; i >= 0; i -- )
if (dfn[fa[v][i]] > dfn[u])
v = fa[v][i];
return fa[v][0];
}
int ask(int u, int v)
{
if (dfn[u] > dfn[v]) swap(u, v);
if (u == v) return u;
for (register int i = t; i >= 0; i -- )
if (dfn[fa[v][i]] > dfn[u])
v = fa[v][i];
return fa[v][0];
}