#include<bits/stdc++.h>usingnamespace std;typedeflonglong LL;typedef pair<int,int> PII;typedefstruct Tnode *p;constint N=1e5+5;struct Tnode{
p ls,rs;int data;};
p root;int n,m,preindex,preorder[N],inorder[N],dep[N],fa[N],b[N];
set<int>s;intfind(int begin,int end,int val){for(int i=begin;i<=end;i++){if(inorder[i]==val)return i;}return-1;}
p buildtreechild(int begin,int end){if(begin>end)returnNULL;
p root=new Tnode;
root->data=preorder[preindex];int index=find(begin,end,preorder[preindex]);if(index==-1)returnNULL;
preindex++;
root->ls=buildtreechild(begin,index-1);
root->rs=buildtreechild(index+1,end);return root;}
p buildtree(){if(preorder==NULL||inorder==NULL)returnNULL;returnbuildtreechild(0,n-1);}voiddfs(p u,int father){
dep[u->data]=dep[father]+1;
fa[u->data]=father;if(u->ls)dfs(u->ls,u->data);if(u->rs)dfs(u->rs,u->data);}intmain(){scanf("%d%d",&m,&n);for(int i=0;i<n;i++){int x;scanf("%d",&x);
preorder[i]=x;
s.insert(x);
b[i]=x;}sort(b,b+n);for(int i=0;i<n;i++) inorder[i]=b[i];
root=buildtree();dfs(root,0);for(int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);bool visu=true,visv=true;if(s.find(u)==s.end()) visu=false;if(s.find(v)==s.end()) visv=false;if(!visu||!visv){if(!visu&&!visv)printf("ERROR: %d and %d are not found.\n",u,v);elseif(!visu)printf("ERROR: %d is not found.\n",u);elseprintf("ERROR: %d is not found.\n",v);}else{if(dep[u]<dep[v]){int p=u,q=v;while(dep[q]>dep[p]) q=fa[q];if(q==p)printf("%d is an ancestor of %d.\n",u,v);else{while(p!=q){
p=fa[p];
q=fa[q];}printf("LCA of %d and %d is %d.\n",u,v,p);}}else{int p=u,q=v;while(dep[p]>dep[q]) p=fa[p];if(p==q)printf("%d is an ancestor of %d.\n",v,u);else{while(p!=q){
p=fa[p];
q=fa[q];}printf("LCA of %d and %d is %d.\n",u,v,p);}}}}return0;}