#include <stdio.h>
#define NX (1 << 17)
#define INF 0x3f3f3f3f
int N, M, v[ NX ], T[ NX << 1 ], x, y;
inline int MIN( int x, int y ) {
return x < y ? x : y;
}
void build( int n, int l, int r ) {
int m;
if( l == r )
T[n] = v[l];
else {
m = (l+r) >> 1;
build( n<<1, l, m );
build( (n<<1)+1, m+1, r );
T[n] = MIN( T[ n<<1 ], T[ (n<<1) + 1 ] );
}
}
int query( int n, int l, int r ) {
int m, min;
if( x <= l && r <= y )
return T[ n ];
m = (l+r) >> 1; min = INF;
if( m >= x )
min = MIN( min, query( n<<1, l, m ) );
if( m < y )
min = MIN( min, query( (n<<1)+1, m+1, r ) );
return min;
}
void cit() {
int i;
scanf( "%d%d", &N, &M );
for( i = 1; i <= N; i++ )
scanf( "%d", v + i );
build( 1, 1, N );
while( M-- ) {
scanf( "%d%d", &x, &y );
printf( "%d\n", query( 1, 1, N ) );
}
}
int main() {
freopen( "rmq.in", "r", stdin );
freopen( "rmq.out", "w", stdout );
cit();
return 0;
}