#include <cstdio>
#include <functional> 
#include <algorithm>
#include <vector>

struct Ciecie
{
	//wysokość, ile arów, kiedy
	int ilosc;
	long long czas;
	long long wysokosc;
};

int n, m;
int a[1000000];
long long s[1000000];
std::vector<Ciecie> stos;

int wyszukajCiecie(int ilosc)
{
	if (stos.empty())
		return -1;

	if (ilosc > stos.front().ilosc)
		return -1;

	int start = 0, stop = stos.size() - 1;
	while (start < stop)
	{
		int srodek = (start + stop + 1) / 2;

		if (stos[srodek].ilosc == ilosc)
			return srodek;

		if (stos[srodek].ilosc < ilosc)
			stop = srodek - 1;
		else
			start = srodek;
	}

	return start;
}

int obliczIloscTraw(long long czas, long long wysokosc)
{
	if (stos.empty())
	{
		if (czas * a[0] <= wysokosc)
			return 0;
	}
	else
	{
		Ciecie c = stos.back();
		if (c.wysokosc + (czas - c.czas) * a[0] <= wysokosc)
			return 0;
	}

	int start = 1, stop = n;
	while (start < stop)
	{
		int srodek = (start + stop + 1) / 2;

		int ciecieId = wyszukajCiecie(srodek);
		long long wys = 0;
		if (ciecieId == -1) 
		{
			wys = czas * a[srodek - 1];
		}
		else
		{
			Ciecie c = stos[ciecieId];
			wys = c.wysokosc + (czas - c.czas) * a[srodek - 1];
		}

		if (wys > wysokosc)
			start = srodek;
		else
			stop = srodek - 1;
	}

	return start;
}

long long obliczWage(int ilosc, long long czas, long long wysokosc)
{
	int start = 0, index = stos.size() - 1;
	long long waga = 0;
	while (start < ilosc)
	{
		if (index >= 0)
		{
			Ciecie c = stos[index];
			int stop = c.ilosc < ilosc ? c.ilosc : ilosc;
			
			long long przyrost = s[stop - 1];
			if (start > 0)
				przyrost -= s[start - 1];
			
			waga += przyrost * (czas - c.czas) + (c.wysokosc - wysokosc) * (stop - start);

			index--;
			start = stop;
		}
		else
		{
			long long przyrost = s[ilosc - 1];
			if (start > 0)
				przyrost -= s[start - 1];
			
			waga += przyrost * czas - wysokosc * (ilosc - start);
			break;
		}
	}
	return waga;
}

void usunCiecia(int ilosc, long long czas, long long wysokosc)
{
	while (!stos.empty() && stos.back().ilosc <= ilosc)
	{
		stos.pop_back();
	}

	Ciecie ciach;
	ciach.ilosc = ilosc;
	ciach.czas = czas;
	ciach.wysokosc = wysokosc;

	stos.push_back(ciach);
}


int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; i++)
		scanf("%d", a + i);

	std::sort(a, a + n, std::greater<int>());
	s[0] = a[0];
	for (int i = 1; i < n; i++)
		s[i] = s[i - 1] + a[i];


	for (int i = 0; i < m; i++)
	{
		long long czas, wysokosc;
		scanf("%lld%lld", &czas, &wysokosc);

		int ilosc = obliczIloscTraw(czas, wysokosc);
		if (ilosc == 0)
			printf("0\n");
		else
		{
			long long waga = obliczWage(ilosc, czas, wysokosc);
			printf("%lld\n", waga);
			usunCiecia(ilosc, czas, wysokosc);
		}
	}

	return 0;
}

