#include <bits/stdc++.h>
using namespace std;
#define MAX_INT (int)2147483645;
void setIO(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
}
int pow2big(int n){
int i = 1;
while(i < n){
i*=2;
}
return i;
}
void build_seg_tree(int node, int l, int r, vector<int>& st, vector<int> &v){
if(l == r){
st[node] = v[l];
return;
}
//left
build_seg_tree(node * 2 + 1, l, (l+r)/2, st, v);
//right
build_seg_tree(node * 2 + 2, (l+r)/2 + 1, r, st, v);
st[node] = min(st[node*2+1], st[node*2+2]);
}
int rmq(int node, int ql, int qr, int l, int r, vector<int> &st){
//sunt cu prins cu totul
if(ql <= l && r <= qr){
return st[node];
}else if(qr < l || r < ql){
return MAX_INT;
}
return min(rmq(node*2+1, ql, qr, l, (l+r)/2, st), rmq(node*2+2, ql, qr, (l+r)/2+1, r , st));
}
int main(){
setIO();
int n,m,x,y;
cin >> n >> m;
vector<int> v(n);
for(int i = 0; i < n; i++){
cin >> v[i];
}
vector<int> st(2 * pow2big(n) - 1);
build_seg_tree(0,0,n-1, st,v);
for(int i = 0; i < m; i++){
cin >> x >> y;--x;--y;
cout << rmq(0,x,y,0,n-1,st) << endl;
}
}