#include <stdio.h>
long n, m, i, j, aa, bb, x, t[400010], init[100010];
int tip;
void initializeaza(long st, long dr, long poz);
long interogare(long p, long a, long b);
void modif(long p, long val);
long min(long a, long b);
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%ld%ld", &n, &m);
initializeaza(1, n, 1);
for (i=1; i<=n; i++)
{
scanf("%ld", &x);
modif(init[i], x);
}//for i
for (i=0; i<m; i++)
{
scanf("%ld%ld", &aa, &bb);
printf("%ld\n", interogare(1, 1, n));
}//for i
return 0;
}//main
void initializeaza(long st, long dr, long poz)
{
long mij=(st+dr)/2;
if (st==dr)
init[st]=poz;
else
{
initializeaza(st, mij, poz*2);
initializeaza(mij+1, dr, poz*2+1);
}//else
}//initializeaza
void modif(long p, long val)
{
t[p]=val;
p/=2;
while (p>0)
{
t[p]=min(t[p*2], t[p*2+1]);
p/=2;
}//while
}//modif
long min(long a, long b)
{
if (a<b)
return a;
else
return b;
}//min
long interogare(long p, long a, long b)
{
long mij=(a+b)/2, rez=1001000;
if ((aa<=a)&&(b<=bb))
return t[p];
if (aa<=mij)
rez=min(rez, interogare(2*p, a, mij));
if (bb>mij)
rez=min(rez, interogare(2*p+1, mij+1, b));
return rez;
}//interogare