#include <bits/stdc++.h>
using namespace std;
void minimiza(long long int &a, long long int b) { a = min(a, b); }
const long long int infinito = 1000000000000000000LL;
const int limite = 5005;
int n, m;
int nhole = 0;
int poshole[limite];
queue<int> vq[limite];
int caben[limite];
int cuantos[limite];
int posini[limite];
long long int coste[limite];
int eleccion[limite];
int ihole[limite];
long long int absolut(long long int x) {
  if (x < 0) return -x;
  return x;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> posini[i];
  sort(posini, posini + n);
  map<int, int> mapa;
  for (int i = 0; i < m; i++) {
    int p, c;
    cin >> p >> c;
    mapa[p] += c;
  }
  m = 0;
  int totalcaben = 0;
  for (map<int, int>::iterator it = mapa.begin(); it != mapa.end(); it++, m++) {
    poshole[m] = it->first;
    caben[m] = it->second;
    totalcaben += caben[m];
  }
  if (totalcaben < n) {
    cout << -1 << endl;
    exit(0);
  }
  {
    int ind = 0;
    for (int i = 0; i < n; i++) {
      if (caben[ind] <= cuantos[ind]) ind++;
      ihole[i] = ind;
      cuantos[ind]++;
    }
  }
  for (int i = n - 1; i >= 0; i--) vq[ihole[i]].push(posini[i]);
  {
    int i = m - 1;
    for (;;) {
      bool trobat = false;
      while (i >= 0) {
        if (int(vq[i].size()) == 0) {
          coste[i] = 0;
          eleccion[i] = 0;
          i--;
          continue;
        }
        coste[i] = infinito;
        if (int(vq[i].size()) < caben[i]) {
          coste[i] = 0;
          eleccion[i] = 0;
        }
        if (i < m - 1) {
          int pos = vq[i].front();
          long long int nextcoste = absolut(poshole[i + 1] - pos) -
                                    absolut(poshole[i] - pos) + coste[i + 1];
          if (nextcoste < coste[i]) {
            coste[i] = nextcoste;
            eleccion[i] = 1;
          }
        }
        if (coste[i] < 0) {
          while (eleccion[i]) {
            int pos = vq[i].front();
            vq[i].pop();
            i++;
            vq[i].push(pos);
          }
          trobat = true;
          break;
        }
        i--;
      }
      if (not trobat) break;
    }
  }
  long long int sol = 0;
  for (int i = 0; i < m; i++) {
    queue<int> &q = vq[i];
    while (not q.empty()) {
      int pos = q.front();
      q.pop();
      sol += absolut(poshole[i] - pos);
    }
  }
  cout << sol << endl;
}
