车站
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

一个国家有n个城市,有n-1条道路连接,保证联通。还有m条铁路,从1~m编号,第i条铁路是从uivi的简单路径,多次询问一段区间的铁路的车站。
一个点可以作为区间[L,R]铁路的车站满足以下条件:
1、R-L+1条铁路都经过这个车站。
2、R-L+1条铁路经过的所有城市中,离车站最远的城市,与它的距离最小。如果有多个,那么选择编号较小的。
并且存在铁路发生改变的情况。

输入描述:

第一行两个整数n,m,表示城市的个数和铁路条数。
接下来n-1行,每行两个整数,描述一条道路。
接下来m行,每行两个整数,描述一条铁路(注意道路与铁路的区分)。
然后一行一个整数Q,表示询问个数。
接下来Q行,每行3个或者4个整数,描述一次操作,具体如下:
操作1:1,l,r,表示询问[l,r]铁路的车站。
操作2:2,x,u,v,表示第x条铁路变成从u到v的一条简单路径。

输出描述:

对于每次询问操作,输出一个整数,表示车站的编号。如果没有满足条件的城市可以作为车站,输出-1。
示例1

输入

复制
6 3
1 2
1 3
2 4
2 5
4 6
4 5
2 3
1 3
7
1 1 1 
1 1 2
1 1 3
2 3 1 6
1 2 3
2 1 1 4
1 1 2

输出

复制
2
2
-1
2
1