#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pil = pair<int, ll>;
using pli = pair<ll, int>;
using piii = pair<int, pii>;
using plll = pair<ll, pll>;
using pib = pair<int, bool>;
using pdi = pair<double, int>;
using pid = pair<int, double>;
using ld = long double;
using piiii = pair<pii, pii>;
int n, m, arr[5001];
ll dp[5001][5001], psa[5001];
pii hol[5001];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> arr[i];
  }
  int t = 0;
  for (int i = 1; i <= m; i++) {
    cin >> hol[i].first >> hol[i].second;
    t += hol[i].second;
  }
  if (t < n) {
    cout << -1 << "\n";
    return 0;
  }
  sort(arr + 1, arr + n + 1);
  sort(hol + 1, hol + m + 1);
  memset(dp, 0x3f3f3f3f3f, sizeof dp);
  ll infi = dp[0][0];
  for (int i = 1; i <= m; i++) {
    memset(psa, 0, sizeof psa);
    deque<pli> dq;
    dq.push_back({0, 0});
    for (int j = 1; j <= n; j++) {
      psa[j] += psa[j - 1] + abs(arr[j] - hol[i].first);
      ll v = dp[i - 1][j] - psa[j];
      while (!dq.empty() && dq.back().first >= v) dq.pop_back();
      if (dp[i - 1][j] != infi) dq.push_back({v, j});
      while (!dq.empty() && dq.front().second < j - hol[i].second)
        dq.pop_front();
      if (dq.empty() || dq.front().first == infi)
        dp[i][j] = infi;
      else
        dp[i][j] = dq.front().first + psa[j];
    }
  }
  cout << dp[m][n] << "\n";
  return 0;
}
