#include <bits/stdc++.h>
#include<iostream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
//vom folosi algoritmul de rmq ce consta in memorarea minimelor pe intervale de lungime 2^k asociate fiecarui element , si apoi raspunderea la orice interogare, impartind intervalul dat in doua intervale mai mici de lungime 2^j
int rmq[100001][20];
int main()
{
int n,m,x,y,nr,power,close,s,minim;
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>rmq[i][0];
}
for(int j=1;j<=int(log2(n));j++)
for(int i=1;i+pow(2,j-1)<=n;i++)
rmq[i][j] = min(rmq[i][j-1],rmq[i+int(pow(2,j-1))][j-1]);
for(int i=0;i<m;i++)
{
fin>>x>>y;
nr = y-x+1;
power = int(log2(nr));
close = pow(2,power);
s = y-(x+close-1);
minim = min(rmq[x][power],rmq[x+s][power]);
fout<<minim<<"\n";
}
return 0;
}