#include <fstream>
#define DIM 100001
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m, x, y, ARB[3 * DIM];
inline int min (int a, int b){if (a < b) return a; return b;}
void update (int nod, int st, int dr, int poz, int val)
{
if (st == dr)
ARB[nod] += val;
else
{
int mij = ((dr + st) >> 1);
if (poz <= mij)
update ((nod << 1), st, mij, poz, val);
else update (1 + (nod << 1), mij + 1, dr, poz, val);
ARB[nod] = min (ARB[nod << 1], ARB[1 + (nod << 1)]);
}
}
void query (int nod, int st, int dr, int x, int y, int &sol)
{
if (x <= st and dr <= y) sol = min (sol, ARB[nod]);
else
{
int mij = ((dr + st) >> 1);
if (x <= mij)
query (nod << 1, st, mij, x, y, sol);
if (mij < y)
query (1 + (nod << 1), mij + 1, dr, x, y, sol);
}
}
int main()
{
in >> n >> m;
for (int i = 1; i <= n; i++)
{
in >> x;
update (1, 1, n, i, x);
}
for (int i = 1, sol; i <= m; i++)
{
sol = (1 << 30);
in >> x >> y;
query (1, 1, n, x, y, sol);
out << sol << '\n';
}
out.close ();
return 0;
}