外向树
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

给出一个 n 个节点的外向树(每条边都是有向边,从父节点指向子节点),根为 1

m 组询问,每次询问至少需要加多少条有向边才可以让编号 [l,r] 之间的点两两可达。

输入描述:

第一行两个数 n,m

接下来 (n-1) 行,每行两个数 u,v,表示 u,v 之间有一条边,不保证 uv 的父节点。

接下来 m 行,每行两个数 l,r,表示一组询问。

输出描述:

输出为 m 行,即每组询问的答案。
示例1

输入

复制
10 5
2 5
3 6
4 8
5 6
6 8
7 5
8 1
9 1
10 9

1 10
4 7
5 6
4 10
2 3

输出

复制
5
2
1
3
2

备注:

对于所有数据,1 \le n,m \le 10^5,1 \le l \le r\le n