#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m,arbint[400005];
int query(int st,int dr,int a,int b,int p)
{
int fs = 2 * p,fd = 2 * p + 1,mij = (a + b) / 2;
if (st <= a and dr >= b)
return arbint[p];
if (st <= mij and dr <= mij)
return query(st,dr,a,mij,fs);
else if (st > mij and dr > mij)
return query(st,dr,mij + 1,b,fd);
else
return min(query(st,dr,a,mij,fs),query(st,dr,mij + 1,b,fd));
}
int main()
{
int i,x,y,a,b,p,fs,fd;
bool boo = true;
in >> n >> m;
for (i = 1; i <= 400000; i++)
arbint[i] = 100001;
for (i = 1; i <= n; i++)
{
in >> x;
a = 1;
b = n;
p = 1;
while (a != b or boo == false)
{
arbint[p] = min(arbint[p],x);
fs = 2 * p;
fd = 2 * p + 1;
if (i <= (a + b) / 2)
{
p = fs;
b = (a + b) / 2;
}
else
{
p = fd;
a = (a + b) / 2 + 1;
}
if (a == b and boo == true)
boo = false;
else if (a == b)
boo = true;
}
}
for (i = 1; i <= m; i++)
{
in >> x >> y;
out << query(x,y,1,n,1) << '\n';
}
return 0;
}