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

题目描述

蒟蒻 最近造了一棵可爱的树,有一天他不小心将颜料桶打翻了,树上的每个节点都染上了颜色。

蒟蒻 有点不知所措,但是神仙 看到之后,顺手就造了个题然后 1s 就切飞了。现在他把这个题给了蒟蒻,并声称:这个水题都不会做你还能自称是这棵树的主人吗?

蒟蒻 才不会认输,大胆地接下了这个问题:树是一棵以 1 为根的数,树上每个节点有一个颜色,节点 i 的颜色为 c_i,神仙 会进行 m 次询问,每次给出 x,y,问有多少种颜色只在 x 和 y 的子树内出现过。

蒟蒻 不想认输,但是挣扎了一会发现并不会做,你能帮助蒟蒻 吗?(当然啦,你不帮这题就没分了:)

输入描述:

第一行两个整数 n,m。

第二行 n 个整数,第 i 个整数 c_i 表示节点 i 的颜色。

接下来 n-1 行每行两个整数 x,y,表示节点 x 和 y 之间有一条边。

接下来 m 行每行两个整数 x,y 表示一次询问。




输出描述:

输出 m 行,每行一个整数表示答案。
示例1

输入

复制
5 2
2 3 1 2 1
1 2
1 3
2 4
2 5
2 3
1 4

输出

复制
2
3

说明

对于第一组询问,颜色 1 分别在 3,5 号节点上出现,5 在 2 的子树内,所以颜色 1 只在 2 和 3 的子树内出现过,颜色 3 只在 2 号节点上出现过,所以颜色 3 也只在 2 和 3 的子树内出现过,于是答案为 1,3 两种颜色。

对于第二组询问,1 的子树就是整棵树,所以包含了所有三种颜色,答案为 3。