#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#define min(a, b) (a < b? a: b)
int v[400384], sol;
char *buffer, *current;
void update(int n, int l, int r, int p, int x)
{
if (l == r)
v[n] = x;
else
{
int m = (l + r) / 2;
if (p <= m)
update(2 * n, l, m, p, x);
else
update(2 * n + 1, m + 1, r, p, x);
v[n] = min(v[2 * n], v[2 * n + 1]);
}
}
void query(int n, int l, int r, int a, int b)
{
if (a <= l && r <= b)
sol = min(sol, v[n]);
else
{
int m = (l + r) / 2;
if (a <= m)
query(2 * n, l, m, a, b);
if (m < b)
query(2 * n + 1, m + 1, r, a, b);
}
}
int fileSize(char *filename)
{
FILE *file = fopen(filename, "rb");
if (!file)
return -1;
fseek(file, 0, SEEK_END);
int size = ftell(file);
fclose(file);
return size;
}
int get()
{
int neg = 0;
while ((*current < '0' || '9' < *current) && *current != '-')
current++;
if (*current == '-')
{
neg = 1;
current++;
}
int n = 0;
while ('0' <= *current && *current <= '9')
n = n * 10 + *(current++) - '0';
if (neg)
return -n;
else
return n;
}
void read(char *filename)
{
int size = fileSize(filename);
buffer = (char *)malloc(size);
current = buffer;
FILE *file = fopen(filename, "rb");
fread(buffer, 1, size, file);
fclose(file);
}
int main()
{
read("rmq.in");
freopen("rmq.out", "wt", stdout);
int n = get();
int m = get();
for (int a, i = 1; i <= n; i++)
{
a = get();
update(1, 1, n, i, a);
}
while (m--)
{
int a = get();
int b = get();
sol = 0x3f3f3f3f;
query(1, 1, n, a, b);
printf("%d\n", sol);
}
return 0;
}