#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 6;
const long long mod = 998244353;
long long fact[N];
long long invfact[N];
long long mult(long long a, long long b) { return (a * b) % mod; }
long long add(long long a, long long b) { return (a + b) % mod; }
long long sub(long long a, long long b) { return (a + 2 * mod - b) % mod; }
long long pw(long long a, long long b) {
  if (!b) return 1;
  if (b & 1) return mult(pw(a, b - 1), a);
  long long v = pw(a, b / 2);
  return mult(v, v);
}
long long inv(long long a) { return pw(a, mod - 2); }
long long divi(long long a, long long b) { return mult(a, inv(b)); }
long long cnk(long long n, long long k) {
  return mult(fact[n], mult(invfact[n - k], invfact[k]));
}
struct shield {
  long long a, b, ind;
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  fact[0] = 1;
  invfact[0] = inv(1);
  for (int i = 1; i < N; ++i) {
    fact[i] = mult(fact[i - 1], i);
    invfact[i] = inv(fact[i]);
  }
  long long n, m;
  cin >> n >> m;
  vector<long long> d(n);
  long long sumR = 0, sumL = 0;
  for (int i = 0; i < n; ++i) {
    cin >> d[i];
    sumR = add(sumR, d[i]);
  }
  sort(d.begin(), d.end());
  vector<shield> s(m);
  vector<long long> ans(m);
  for (int i = 0; i < m; ++i) {
    cin >> s[i].a >> s[i].b;
    s[i].ind = i;
  }
  sort(s.begin(), s.end(), [&](shield a, shield b) { return a.b < b.b; });
  long long uk = 0;
  for (int i = 0; i < m; ++i) {
    while (uk < n && d[uk] < s[i].b) {
      sumL = add(sumL, d[uk]);
      sumR = sub(sumR, d[uk]);
      uk++;
    }
    long long u = n - uk;
    long long a = s[i].a;
    if (u < a) continue;
    long long Left_Side = mult(sumL, divi(mult(fact[n], sub(u + 1, a)), u + 1));
    long long Right_Side =
        mult(divi(mult(sub(u, a), fact[n]), mult(1, u)), sumR);
    long long all = divi(add(Left_Side, Right_Side), fact[n]);
    ans[s[i].ind] = all;
  }
  for (int i = 0; i < m; ++i) cout << ans[i] << '\n';
}
