#include <stdio.h>
struct nod{
int nr,poz;
nod *st,*dr;
}*r;
int n,m;
void insert(nod *&r,int nr,int poz){
if(r==0){
r=new nod;
r->nr=nr;
r->poz=poz;
r->st=0;
r->dr=0;
}
else
if(nr<r->nr)
insert(r->st,nr,poz);
else
if(nr>r->nr)
insert(r->dr,nr,poz);
}
int minim(int a,int b,int c){
int min=a;
if(min>b)
min=b;
if(min>c)
min=c;
return min;
}
int find(nod *r,int x,int y){
int a=n+1,b=n+1,c=n+1;
if(r){
if(r->poz<=y&&x<=r->poz)
c=r->nr;
a=find(r->st,x,y);
b=find(r->dr,x,y);
}
return minim(a,b,c);
}
void read(){
freopen("rmq.in","r",stdin);
scanf("%d %d\n",&n,&m);
int i,x,y;
for(i=1;i<=n;i++){
scanf("%d\n",&x);
insert(r,x,i);
}
for(i=1;i<=m;i++){
scanf("%d %d\n",&x,&y);
// printf("%d\n",find(r,x,y));
}
fclose(stdin);
}
void write(nod *r){
if(r){
write(r->st);
printf("%d ",r->poz);
write(r->dr);
}
}
int main(){
freopen("rmq.out","w",stdout);
read();
printf("%d ",find(r,2,4));
fclose(stdout);
return 0;
}