struct RMQ{ // Range Minimum Query
int N, H;
vector<vector<int>> table;
RMQ(int N, vector<int> &arr): N(N){
H = 1;
while((1 << H) <= N) H++;
table.assign(N, vector<int>(H));
rep(i, 0, N) table[i][0] = arr[i];
rep(j, 1, H) rep(i, 0, N){
int right = i + (1 << (j-1));
if(right < N) table[i][j] = min(table[i][j-1], table[right][j-1]);
else table[i][j] = table[i][j-1];
}
}
int query(int l, int r){ // [L, R]
r++;
int k = 31 - __builtin_clz(r-l);
return min(table[l][k], table[r-(1 << k)][k]);
}
};
void solve(){
int N, M;
N = getu<6, int>();
M = getu<6, int>();
vector<int> A(N);
rep(i, 0, N) A[i] = getu<10, int>();
RMQ rmq(N, A);
while(M--){
int l, r; l = getu<6, int>(); r = getu<6, int>();
putu<10, int>(rmq.query(l-1, r-1));
}
}