#include <iostream>
#include <fstream>
#include <vector>
#define MAXN 100001
using namespace std;
int int_tree[MAXN*4];
int minim;
void mini(int l, int r, int qs, int qe, int i){
if (qs <= l && qe >= r){
minim = min(minim, int_tree[i]);
return;
}
int mid = (l+r)/2;
if(qs<=mid) mini(l, mid, qs, qe, 2*i+1);
if(qe>mid) mini(mid+1, r, qs, qe, 2*i+2);
}
void change_element(int l, int r, int i, int k, int val){
if(l==r){
int_tree[i] = val;
return;
}
int mid = (l+r)/2;
if(k<=mid) change_element(l, mid, i*2+1, k, val);
else change_element(mid+1, r, i*2+2, k, val);
int_tree[i] = min(int_tree[2*i+1], int_tree[2*i + 2]);
}
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, x;
/// Read data
fin>>n>>m;
for(int i=0;i<n;++i){
fin>>x;
change_element(0,n-1,0,i, x);
}
/// Walk tree for every range
int a, b;
while(m--){
fin>>a>>b;
minim = 9999999;
mini(0, n-1,a-1, b-1, 0);
fout<<minim<<'\n';
}
return 0;
}