#include<cstdio>
#include<algorithm>
#define NMAX 100100
using namespace std;
int aint[2*NMAX];
int elem[NMAX];
int constr(int poz, int left, int right){
if(left == right){
aint[poz] = elem[left];
return elem[left];
}
int mid = (left + right) / 2;
aint[poz] = min(constr(2 * poz, left, mid), constr(2 * poz + 1, mid + 1, right));
return aint[poz];
}
int querry(int poz, int left, int right, int lc, int rc){
if(lc == left && rc == right){
return aint[poz];
}
int mid = (left + right) / 2;
if(rc <= mid)
return querry(2 * poz, left, mid, lc, rc);
else if(lc >= mid + 1)
return querry(2 * poz + 1, mid + 1, right, lc, rc);
else return min( querry(2 * poz, left, mid, lc, mid), querry(2 * poz + 1, mid + 1, right, mid + 1, rc));
}
int main(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, i, m;
scanf("%d%d", &n, &m);
for(i = 1; i <= n; i++)
scanf("%d", &elem[i]);
constr(1, 1, n);
/* for(i = 1; i <= 2 * n; i++)
printf("%d ", aint[i]);*/
int c, d;
for(i = 1; i <= m; i++){
scanf("%d%d", &c, &d);
printf("%d\n", querry(1, 1, n, c, d));
}
return 0;
}