#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
// Tối ưu hóa tốc độ nhập xuất
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q;
if (!(cin >> n >> q)) return 0;
vector<int> a(n + 1), pref(n + 1, 0);
for (int i = 1; i <= n; i++) cin >> a[i];
// Sắp xếp mảng tăng dần
sort(a.begin() + 1, a.end());
// Tạo mảng cộng dồn để tính tổng nhanh
for (int i = 1; i <= n; i++) {
pref[i] = pref[i - 1] + a[i];
}
while (q--) {
int k, m;
cin >> k >> m;
// Đếm số lượng hoa thuộc nhóm < k và nhóm >= k
int pos = lower_bound(a.begin() + 1, a.end(), k) - a.begin();
int N_L = pos - 1; // Số lượng hoa < k
int N_R = n - pos + 1; // Số lượng hoa >= k
// Tìm kiếm nhị phân số lượng hoa (x) sẽ lấy ở nhóm bên trái (< k)
int low = max(0LL, m - N_R);
int high = min(m, N_L);
while (low < high) {
int mid = (low + high) / 2;
// Nếu đang lấy `mid` bông bên trái, bông tiếp theo có thể lấy là:
int cost_left = a[mid + 1];
// Bông bên phải tương ứng định bị thay thế (bông thứ m - mid từ cuối mảng lên):
int idx_right = n - (m - mid) + 1;
int cost_right = 2 * k - a[idx_right];
// Nếu bông bên trái rẻ hơn bông bên phải, ta nên dịch sang phải để lấy thêm hoa bên trái
if (cost_left < cost_right) {
low = mid + 1;
} else {
high = mid;
}
}
// Kết quả x tối ưu tìm được
int opt_x = low;
int opt_y = m - opt_x; // Số bông lấy từ cuối mảng lên
// Tính tổng kết quả
int ans = pref[opt_x]; // Nhóm bên trái giữ nguyên giá trị f(a_i) = a_i
if (opt_y > 0) {
int sum_R = pref[n] - pref[n - opt_y];
ans += 2 * k * opt_y - sum_R; // Nhóm bên phải tính theo công thức 2k - a_i
}
cout << ans << '\n';
}
return 0;
}