#include <bits/stdc++.h>
using namespace std;
#define all(ac) ac.begin(),ac.end()
#define task "tet"
const int N=2e5+1;
struct node {
int mval, len;
node() {
mval=0;
len=0;
}
node(int x, int y): mval(x), len(y) {}
bool operator ==(const node o) const {return o.mval==mval && o.len==len;}
};
vector <int> g[N];
int pos[N], a[N], A[N], head[N], par[N], rmq[N][19], n,q, high[N], sz[N], cur_pos, up[N], down[N];
node pf[N];
node it;
void dfs(int u) {
sz[u]=1;
for(auto v:g[u]) if(v!=par[u]) {
par[v]=u, high[v]=high[u]+1;
dfs(v), sz[u]+=sz[v];
}
return;
}
void hld(int u, int h) {
head[u]=h, pos[u]=++cur_pos, A[cur_pos]=u;
int x=0;
if(pf[h].mval==0) pf[h].mval=u;
pf[h].len=u;
for(auto v:g[u]) if(v!=par[u] && sz[v]>sz[x]) x=v;
if(x) hld(x,h);
for(auto v:g[u]) if(v!=par[u] && v!=x) hld(v,v);
return;
}
int lca(int u, int v) {
while(head[u]!=head[v]) {
if(high[head[u]]>high[head[v]]) u=par[head[u]];
else v=par[head[v]];
}
return high[u]>high[v]?v:u;
}
void pre_calc(int &u, int &v, int f[]) {
stack <int> stk;
for(int i=u;i<=v;i++) {
while(stk.size() && a[A[stk.top()]]<=a[A[i]]) stk.pop();
if(stk.empty()) f[i]=1;
else f[i]=f[stk.top()]+1;
stk.emplace(i);
}
return;
}
int get_max(int &l, int &r) {
int k=31-__builtin_clz(r-l+1);
return max(rmq[l][k],rmq[r-(1<<k)+1][k]);
}
int get_pos_low(int lo ,int hi, int w) {
int posi=-1;
int in=hi;
while(lo<=hi) {
int mid=(lo+hi)>>1;
if(get_max(mid,in)>w) lo=mid+1, posi=mid;
else hi=mid-1;
}
return posi;
}
int get_pos_up(int lo, int hi, int w) {
int posi=-1;
int in=lo;
while(lo<=hi) {
int mid=(lo+hi)>>1;
if(get_max(in,mid)>w) hi=mid-1, posi=mid;
else lo=mid+1;
}
return posi;
}
node calc(int u, int v, int w, int type) {
if(type>0) {
int pid=get_pos_low(u,v,w);
if(pid==-1) return it;
if(type==2) return {get_max(u,v),down[pid]};
int pid_=get_pos_low(u,v,get_max(u,v)-1);
return {a[A[pid_]],down[pid]-down[pid_]+1};
}
int pid=get_pos_up(u,v,w);
if(pid==-1) return it;
int pid_=get_pos_up(u,v,get_max(u,v)-1);
return {a[A[pid_]],up[pid]-up[pid_]+1};
}
int solve(int u, int v) {
int ans=0,cur_val=0;
int lc=lca(u,v);
int ok=1;
while(head[u]!=head[lc]) {
auto e=calc(pos[head[u]],pos[u],cur_val,ok);
if(e.len) ans+=e.len, cur_val=max(cur_val,e.mval);
u=par[head[u]], ok=2;
}
auto e=calc(pos[lc],pos[u],cur_val,1);
if(e.len) ans+=e.len, cur_val=max(cur_val,e.mval);
stack <node> stk;
while(head[v]!=head[lc]) {
stk.emplace(node{head[v],v});
v=par[head[v]];
}
if(v!=lc) {
e=calc(pos[lc]+1,pos[v],cur_val,0);
if(e.len) ans+=e.len, cur_val=max(cur_val,e.mval);
}
while(stk.size()) {
node d=stk.top(); stk.pop();
e=calc(pos[d.mval],pos[d.len],cur_val,0);
if(e.len) ans+=e.len, cur_val=max(cur_val,e.mval);
}
return ans;
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> q;
for(int i=1;i<=n;i++) cin >> a[i];
for(int i=1;i<n;i++) {
int u,v; cin >> u >> v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
dfs(1), hld(1,1);
int pre_ans=0;
for(int i=1;i<=n;i++) rmq[i][0]=a[A[i]];
for(int j=1;j<19;j++) {
for(int i=1;i+(1<<j)-1<=n;i++) rmq[i][j]=max(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
}
for(int i=1;i<=n;i++) {
if(pf[i]==it) continue;
int p1=pos[pf[i].mval], p2=pos[pf[i].len];
pre_calc(p1,p2,down);
stack <int> stk;
for(int j=p2;j>=p1;j--) {
while(stk.size() && a[A[stk.top()]]<=a[A[j]]) stk.pop();
if(stk.empty()) up[j]=1;
else up[j]=up[stk.top()]+1;
stk.emplace(j);
}
}
while(q--) {
int x,y; cin >> x >> y;
x+=pre_ans, y+=pre_ans;
while(x>=n) x-=n;
while(y>=n) y-=n;
cout << (pre_ans=solve(x+1,y+1)) << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgYWxsKGFjKSBhYy5iZWdpbigpLGFjLmVuZCgpCiNkZWZpbmUgdGFzayAidGV0Igpjb25zdCBpbnQgTj0yZTUrMTsKc3RydWN0IG5vZGUgewogICAgaW50IG12YWwsIGxlbjsKICAgIG5vZGUoKSB7CiAgICAgICAgbXZhbD0wOwogICAgICAgIGxlbj0wOwogICAgfQogICAgbm9kZShpbnQgeCwgaW50IHkpOiBtdmFsKHgpLCBsZW4oeSkge30KICAgIGJvb2wgb3BlcmF0b3IgPT0oY29uc3Qgbm9kZSBvKSBjb25zdCB7cmV0dXJuIG8ubXZhbD09bXZhbCAmJiBvLmxlbj09bGVuO30KfTsKdmVjdG9yIDxpbnQ+IGdbTl07CmludCBwb3NbTl0sIGFbTl0sIEFbTl0sIGhlYWRbTl0sIHBhcltOXSwgcm1xW05dWzE5XSwgbixxLCBoaWdoW05dLCBzeltOXSwgY3VyX3BvcywgdXBbTl0sIGRvd25bTl07Cm5vZGUgcGZbTl07Cm5vZGUgaXQ7CnZvaWQgZGZzKGludCB1KSB7CiAgICBzelt1XT0xOwogICAgZm9yKGF1dG8gdjpnW3VdKSBpZih2IT1wYXJbdV0pIHsKICAgICAgICBwYXJbdl09dSwgaGlnaFt2XT1oaWdoW3VdKzE7CiAgICAgICAgZGZzKHYpLCBzelt1XSs9c3pbdl07CiAgICB9CiAgICByZXR1cm47Cn0Kdm9pZCBobGQoaW50IHUsIGludCBoKSB7CiAgICBoZWFkW3VdPWgsIHBvc1t1XT0rK2N1cl9wb3MsIEFbY3VyX3Bvc109dTsKICAgIGludCB4PTA7CiAgICBpZihwZltoXS5tdmFsPT0wKSBwZltoXS5tdmFsPXU7CiAgICBwZltoXS5sZW49dTsKICAgIGZvcihhdXRvIHY6Z1t1XSkgaWYodiE9cGFyW3VdICYmIHN6W3ZdPnN6W3hdKSB4PXY7CiAgICBpZih4KSBobGQoeCxoKTsKICAgIGZvcihhdXRvIHY6Z1t1XSkgaWYodiE9cGFyW3VdICYmIHYhPXgpIGhsZCh2LHYpOwogICAgcmV0dXJuOwp9CmludCBsY2EoaW50IHUsIGludCB2KSB7CiAgICB3aGlsZShoZWFkW3VdIT1oZWFkW3ZdKSB7CiAgICAgICAgaWYoaGlnaFtoZWFkW3VdXT5oaWdoW2hlYWRbdl1dKSB1PXBhcltoZWFkW3VdXTsKICAgICAgICBlbHNlIHY9cGFyW2hlYWRbdl1dOwogICAgfQogICAgcmV0dXJuIGhpZ2hbdV0+aGlnaFt2XT92OnU7Cn0Kdm9pZCBwcmVfY2FsYyhpbnQgJnUsIGludCAmdiwgaW50IGZbXSkgewogICAgc3RhY2sgPGludD4gc3RrOwogICAgZm9yKGludCBpPXU7aTw9djtpKyspIHsKICAgICAgICB3aGlsZShzdGsuc2l6ZSgpICYmIGFbQVtzdGsudG9wKCldXTw9YVtBW2ldXSkgc3RrLnBvcCgpOwogICAgICAgIGlmKHN0ay5lbXB0eSgpKSBmW2ldPTE7CiAgICAgICAgZWxzZSBmW2ldPWZbc3RrLnRvcCgpXSsxOwogICAgICAgIHN0ay5lbXBsYWNlKGkpOwogICAgfQogICAgcmV0dXJuOwp9CmludCBnZXRfbWF4KGludCAmbCwgaW50ICZyKSB7CiAgICBpbnQgaz0zMS1fX2J1aWx0aW5fY2x6KHItbCsxKTsKICAgIHJldHVybiBtYXgocm1xW2xdW2tdLHJtcVtyLSgxPDxrKSsxXVtrXSk7Cn0KaW50IGdldF9wb3NfbG93KGludCBsbyAsaW50IGhpLCBpbnQgdykgewogICAgaW50IHBvc2k9LTE7CiAgICBpbnQgaW49aGk7CiAgICB3aGlsZShsbzw9aGkpIHsKICAgICAgICBpbnQgbWlkPShsbytoaSk+PjE7CiAgICAgICAgaWYoZ2V0X21heChtaWQsaW4pPncpIGxvPW1pZCsxLCBwb3NpPW1pZDsKICAgICAgICBlbHNlIGhpPW1pZC0xOwogICAgfQogICAgcmV0dXJuIHBvc2k7Cn0KaW50IGdldF9wb3NfdXAoaW50IGxvLCBpbnQgaGksIGludCB3KSB7CiAgICBpbnQgcG9zaT0tMTsKICAgIGludCBpbj1sbzsKICAgIHdoaWxlKGxvPD1oaSkgewogICAgICAgIGludCBtaWQ9KGxvK2hpKT4+MTsKICAgICAgICBpZihnZXRfbWF4KGluLG1pZCk+dykgaGk9bWlkLTEsIHBvc2k9bWlkOwogICAgICAgIGVsc2UgbG89bWlkKzE7CiAgICB9CiAgICByZXR1cm4gcG9zaTsKfQpub2RlIGNhbGMoaW50IHUsIGludCB2LCBpbnQgdywgaW50IHR5cGUpIHsKICAgIGlmKHR5cGU+MCkgewogICAgICAgIGludCBwaWQ9Z2V0X3Bvc19sb3codSx2LHcpOwogICAgICAgIGlmKHBpZD09LTEpIHJldHVybiBpdDsKICAgICAgICBpZih0eXBlPT0yKSByZXR1cm4ge2dldF9tYXgodSx2KSxkb3duW3BpZF19OwogICAgICAgIGludCBwaWRfPWdldF9wb3NfbG93KHUsdixnZXRfbWF4KHUsdiktMSk7CiAgICAgICAgcmV0dXJuIHthW0FbcGlkX11dLGRvd25bcGlkXS1kb3duW3BpZF9dKzF9OwogICAgfQogICAgaW50IHBpZD1nZXRfcG9zX3VwKHUsdix3KTsKICAgIGlmKHBpZD09LTEpIHJldHVybiBpdDsKICAgIGludCBwaWRfPWdldF9wb3NfdXAodSx2LGdldF9tYXgodSx2KS0xKTsKICAgIHJldHVybiB7YVtBW3BpZF9dXSx1cFtwaWRdLXVwW3BpZF9dKzF9Owp9CmludCBzb2x2ZShpbnQgdSwgaW50IHYpIHsKICAgIGludCBhbnM9MCxjdXJfdmFsPTA7CiAgICBpbnQgbGM9bGNhKHUsdik7CiAgICBpbnQgb2s9MTsKICAgIHdoaWxlKGhlYWRbdV0hPWhlYWRbbGNdKSB7CiAgICAgICAgYXV0byBlPWNhbGMocG9zW2hlYWRbdV1dLHBvc1t1XSxjdXJfdmFsLG9rKTsKICAgICAgICBpZihlLmxlbikgYW5zKz1lLmxlbiwgY3VyX3ZhbD1tYXgoY3VyX3ZhbCxlLm12YWwpOwogICAgICAgIHU9cGFyW2hlYWRbdV1dLCBvaz0yOwogICAgfQogICAgYXV0byBlPWNhbGMocG9zW2xjXSxwb3NbdV0sY3VyX3ZhbCwxKTsKICAgIGlmKGUubGVuKSBhbnMrPWUubGVuLCBjdXJfdmFsPW1heChjdXJfdmFsLGUubXZhbCk7CiAgICBzdGFjayA8bm9kZT4gc3RrOwogICAgd2hpbGUoaGVhZFt2XSE9aGVhZFtsY10pIHsKICAgICAgICBzdGsuZW1wbGFjZShub2Rle2hlYWRbdl0sdn0pOwogICAgICAgIHY9cGFyW2hlYWRbdl1dOwogICAgfQogICAgaWYodiE9bGMpIHsKICAgICAgICBlPWNhbGMocG9zW2xjXSsxLHBvc1t2XSxjdXJfdmFsLDApOwogICAgICAgIGlmKGUubGVuKSBhbnMrPWUubGVuLCBjdXJfdmFsPW1heChjdXJfdmFsLGUubXZhbCk7CiAgICB9CiAgICB3aGlsZShzdGsuc2l6ZSgpKSB7CiAgICAgICAgbm9kZSBkPXN0ay50b3AoKTsgc3RrLnBvcCgpOwogICAgICAgIGU9Y2FsYyhwb3NbZC5tdmFsXSxwb3NbZC5sZW5dLGN1cl92YWwsMCk7CiAgICAgICAgaWYoZS5sZW4pIGFucys9ZS5sZW4sIGN1cl92YWw9bWF4KGN1cl92YWwsZS5tdmFsKTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KaW50MzJfdCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKSwgY291dC50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBxOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIGNpbiA+PiBhW2ldOwogICAgZm9yKGludCBpPTE7aTxuO2krKykgewogICAgICAgIGludCB1LHY7IGNpbiA+PiB1ID4+IHY7CiAgICAgICAgZ1t1XS5lbXBsYWNlX2JhY2sodik7CiAgICAgICAgZ1t2XS5lbXBsYWNlX2JhY2sodSk7CiAgICB9CiAgICBkZnMoMSksIGhsZCgxLDEpOwogICAgaW50IHByZV9hbnM9MDsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBybXFbaV1bMF09YVtBW2ldXTsKICAgIGZvcihpbnQgaj0xO2o8MTk7aisrKSB7CiAgICAgICAgZm9yKGludCBpPTE7aSsoMTw8aiktMTw9bjtpKyspIHJtcVtpXVtqXT1tYXgocm1xW2ldW2otMV0scm1xW2krKDE8PChqLTEpKV1bai0xXSk7CiAgICB9CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgewogICAgICAgIGlmKHBmW2ldPT1pdCkgY29udGludWU7CiAgICAgICAgaW50IHAxPXBvc1twZltpXS5tdmFsXSwgcDI9cG9zW3BmW2ldLmxlbl07CiAgICAgICAgcHJlX2NhbGMocDEscDIsZG93bik7CiAgICAgICAgc3RhY2sgPGludD4gc3RrOwogICAgICAgIGZvcihpbnQgaj1wMjtqPj1wMTtqLS0pIHsKICAgICAgICAgICAgd2hpbGUoc3RrLnNpemUoKSAmJiBhW0Fbc3RrLnRvcCgpXV08PWFbQVtqXV0pIHN0ay5wb3AoKTsKICAgICAgICAgICAgaWYoc3RrLmVtcHR5KCkpIHVwW2pdPTE7CiAgICAgICAgICAgIGVsc2UgdXBbal09dXBbc3RrLnRvcCgpXSsxOwogICAgICAgICAgICBzdGsuZW1wbGFjZShqKTsKICAgICAgICB9CiAgICB9CiAgICB3aGlsZShxLS0pIHsKICAgICAgICBpbnQgeCx5OyBjaW4gPj4geCA+PiB5OwogICAgICAgIHgrPXByZV9hbnMsIHkrPXByZV9hbnM7CiAgICAgICAgd2hpbGUoeD49bikgeC09bjsKICAgICAgICB3aGlsZSh5Pj1uKSB5LT1uOwogICAgICAgIGNvdXQgPDwgKHByZV9hbnM9c29sdmUoeCsxLHkrMSkpIDw8ICdcbic7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=