#include <bits/stdc++.h>
using namespace std;
inline long long rd() {
  long long x = 0;
  int ch = getchar(), f = 1;
  while (!isdigit(ch) && (ch != '-') && (ch != EOF)) ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline void rt(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10)
    rt(x / 10), putchar(x % 10 + '0');
  else
    putchar(x + '0');
}
const int maxn = 5005;
map<int, int> num;
int n, m, x[maxn];
long long pre[maxn], f[2][maxn];
pair<int, long long> que[maxn];
int he, ta;
int main() {
  n = rd(), m = rd();
  for (int i = int(1); i <= (int)(n); i++) x[i] = rd();
  sort(x + 1, x + n + 1);
  int sum = 0;
  for (int i = int(1); i <= (int)(m); i++) {
    int x = rd(), y = rd();
    num[x] += y;
    sum += y;
  }
  if (sum < n) return puts("-1"), 0;
  int fr = 0, go = 1;
  for (int i = int(1); i <= (int)(n); i++) f[fr][i] = 1ll << 60;
  for (map<int, int>::iterator i = num.begin(); i != num.end(); i++) {
    int p = (*i).first, c = (*i).second;
    pre[0] = 0;
    for (int i = int(1); i <= (int)(n); i++)
      pre[i] = pre[i - 1] + abs(x[i] - p);
    he = 1, ta = 0;
    que[++ta] = make_pair(0, 0);
    for (int i = int(1); i <= (int)(n); i++) {
      while (he <= ta && i - que[he].first > c) he++;
      while (ta >= he && que[ta].second >= f[fr][i] - pre[i]) ta--;
      que[++ta] = make_pair(i, f[fr][i] - pre[i]);
      f[go][i] = que[he].second + pre[i];
    }
    fr ^= 1, go ^= 1;
  }
  rt(f[fr][n]), putchar('\n');
}
