#include <cstdio>
#define min(a,b) a>b?b:a
long x[100000];
long a[2000001];
long n,m;
void init(int node,int i,int j)
{
if (i==j)
a[node] = x[i];
else
{
init(node*2,i,(i+j)/2);
init(node*2+1,(i+j)/2+1,j);
a[node] = min(a[node*2],a[node*2+1]);
}
}
long query(int node,int x,int y,int i,int j)
{
if (x > j || y < i)
return -1;
else if (i >= x && j <= y)
return a[node];
else
{
long p1 = query(node*2,x,y,i,(i+j)/2);
long p2 = query(node*2+1,x,y,(i+j)/2+1,j);
if (p1 == -1)
return p2;
else if (p2 == -1)
return p1;
else return min(p1,p2);
}
}
int main()
{
FILE*f;
FILE*g;
f = fopen("rmq.in","r");
fscanf(f,"%ld %ld",&n,&m);
for (int i = 0; i!=n; ++i)
fscanf(f,"%ld",&x[i]);
init(1,0,n-1);
g = fopen("rmq.out","w");
long x,y;
for (int i = 0; i !=m; ++i)
{
fscanf(f,"%ld %ld",&x,&y);
fprintf(g,"%ld \n",query(1,x-1,y-1,0,n-1));
}
fclose(g);
fclose(f);
return 0;
}