以下是“最小直径问题”的描述:
给定一个包含 $n$ 个顶点的森林(无环无向图)。考虑向森林中添加一些边,使其变为一棵树。求所得树的最小可能直径。
树的直径定义为所有顶点对之间的最大距离。树中两点之间的距离定义为它们之间最短路径上的边数。
给定一个包含 $n$ 个顶点和 $m$ 条边的森林。边按 $1, 2, \dots, m$ 编号。对于每个 $i = 1, 2, \dots, m$,考虑仅包含前 $i$ 条边的森林,并计算该森林对应的最小直径问题的答案。
输入格式
第一行包含一个整数 $T$ ($1 \le T \le 10^3$),表示测试用例的数量。
对于每个测试用例,第一行包含两个整数 $n, m$ ($2 \le n \le 10^5, 1 \le m < n$)。
接下来的 $m$ 行,每行包含两个整数 $u$ 和 $w$ ($1 \le u, w \le n$),描述森林的第 $i$ 条边。
保证所有测试用例中 $n$ 的总和不超过 $10^6$,且 $m$ 条边构成一个森林。
输出格式
对于每个测试用例,输出 $m$ 行。第 $i$ 行应包含一个整数,表示仅包含原始森林前 $i$ 条边时,最小直径问题的答案。
样例
样例输入 1
1 5 4 1 2 2 3 3 4 4 5
样例输出 1
2 2 3 4