#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, m, x, y;
int a[100001];
int tree[500001];
inline int read()
{
int x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9')
{
if(ch == '-') f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9')
{
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
inline void refresh_tree(const int u)
{
tree[u] = tree[u << 1] + tree[(u << 1) + 1];
}
inline void build(const int u, int L, int R)
{
if(L == R)
{
tree[u] = a[L];
return ;
}
int mid = (L + R) >> 1;
build(u << 1, L, mid);
build(u << 1 | 1, mid + 1, R);
refresh_tree(u);
}
inline int query(int u, int L, int R, int l, int r)
{
if(L == R) return tree[u];
int mid = (L + R) >> 1;
if(r <= mid) return query(u << 1, L, mid, l, r);
if(l > mid) return query(u << 1 | 1, mid + 1, R, l, r);
return min(query(u << 1, L, mid, l, r), query(u << 1 | 1, mid + 1, R, l, r));
}
int main()
{
n = read(), m = read();
for(int i = 1; i <= n; i++)
a[i] = read();
build(1, 1, n);
while(m--)
{
x = read(), y = read();
printf("%d ", query(1, 1, n, x, y));
}
return 0;
}