#include #include #include #include #include #include using namespace std; #define N 80010 int __pow[25]; int fa[N],val[N],p[N]; int node[2*N],first[N],dep[2*N],dp[2*N][25]; bool vis[N]; vectore[N]; void dfs(int &index , int u ,int d , int par) { ++index; vis[u] = true; first[u] = index; node[index] = u; dep[index] = d; fa[u] = par; for(int i=0; i y) swap(x,y); int index = RMQ(x,y); return node[index]; } bool cmp(int a, int b) { return a > b; } void path(int &index , int s , int t) { while(s != t) { p[index++] = val[s]; s = fa[s]; } p[index++] = val[t]; } void solve(int kth , int u,int v) { int lca = LCA(u,v); int tot = 0; path(tot,u,lca); path(tot,v,lca); tot--; if(kth > tot) { printf("invalid request!\n"); return ; } sort(p,p+tot,cmp); printf("%d\n",p[kth-1]); } int main() { for(int i=0; i<25; i++) __pow[i] = 1 << i; int n,q; scanf("%d%d",&n,&q); for(int i=1; i<=n; i++) scanf("%d",&val[i]); for(int i=1; i