#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;
}