#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int minn;
int aint[500005];
void update(int node, int st, int dr, int poz, int val)
{
if(st == dr){
aint[node] = val;
return ;
}
int med = (st + dr) / 2;
if(poz <= med)
update(2 * node, st, med, poz, val);
else
update(2 * node + 1, med + 1, dr, poz, val);
aint[node] = min(aint[2 * node], aint[node * 2 + 1]);
}
void rmq(int node, int st, int dr, int start, int fin)
{
if(start <= st and dr <= fin){
minn = min(minn, aint[node]);
return ;
}
int med = (st + dr) / 2;
if(start <= med)
rmq(2 * node, st, med, start, fin);
if(med < fin)
rmq(2 * node + 1, med + 1, dr, start, fin);
}
int main()
{
int i, n, a, t, b, c;
cin >> n >> t;
for(i = 1; i <= n; i++){
cin >> a;
update(1, 1, n, i, a);
}
for(i = 1; i <= t; i++){
minn = 1000000;
cin >> b >> c;
rmq(1, 1, n, b, c);
cout << minn << "\n";
}
return 0;
}