#include<bits/stdc++.h>#definepbpush_backusingnamespace std;constint N =1e5+10;
vector<int> e[N], ans[N];
vector<int>X(N);voiddfs(int u,int fa){
vector<int> order;
order.pb(X[u]);for(auto it : e[u]){if(it == fa)continue;dfs(it, u);for(auto j : ans[it]) order.pb(j);}sort(order.begin(), order.end(), greater<int>());int num =min(20,int(order.size()));for(int i =0; i < num; i ++) ans[u].pb(order[i]);return;}intmain(){
ios::sync_with_stdio(false);
cin.tie(nullptr);int n, tt;
cin >> n >> tt;for(int i =0; i < n; i ++) cin >> X[i];for(int i =0; i < n -1; i ++){int x, y;
cin >> x >> y;
x --;
y --;
e[x].pb(y);
e[y].pb(x);}dfs(0,-1);while(tt --){int z, k;
cin >> z >> k;
z --;
k --;
cout << ans[z][k]<<'\n';}return0;}