#include <bits/stdc++.h>
using namespace std;
const long long inf = 2e10;
int n, m, tt, b[10003], ct[10003], x[10003], p[10003], c[10003];
inline int rd() {
  int res = 0;
  char c, f = 0;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') f = 1;
  while (c >= '0' && c <= '9') res = res * 10 + c - '0', c = getchar();
  return f ? -res : res;
}
struct Heap {
  pair<long long, int> a[10003];
  int len;
  inline void up(int i) {
    int j = i >> 1;
    pair<long long, int> x = a[i];
    while (j && x < a[j]) a[i] = a[j], i = j, j >>= 1;
    a[i] = x;
  }
  inline void down(int i) {
    int j = i << 1;
    pair<long long, int> x = a[i];
    while (j <= len) {
      if (j < len && a[j + 1] < a[j]) j++;
      if (a[j] < x)
        a[i] = a[j], i = j, j <<= 1;
      else
        break;
    }
    a[i] = x;
  }
  inline void push(pair<long long, int> b) {
    a[++len] = b;
    up(len);
  }
  inline pair<long long, int> pop() {
    pair<long long, int> b = a[1];
    a[1] = a[len--];
    if (len) down(1);
    return b;
  }
} mice, hole;
int main() {
  n = rd(), m = rd();
  int i, s = 0, num, cnt;
  long long cost, ans = 0, t;
  for (i = 1; i <= n; i++) b[++tt] = x[i] = rd();
  for (i = 1; i <= m; i++) b[++tt] = p[i] = rd(), s += c[i] = rd();
  if (s < n) {
    puts("-1");
    return 0;
  }
  sort(b + 1, b + 1 + tt), tt = unique(b + 1, b + 1 + tt) - b - 1;
  for (i = 1; i <= n; i++) ct[lower_bound(b + 1, b + 1 + tt, x[i]) - b]++;
  for (i = 1; i <= m; i++) ct[lower_bound(b + 1, b + 1 + tt, p[i]) - b] -= c[i];
  for (i = 1; i <= tt; i++) {
    s = b[i], num = ct[i];
    while (num > 0) {
      cost = inf, cnt = num;
      if (hole.len && (t = hole.a[1].first + s) < cost) {
        cost = t, cnt = min(cnt, hole.a[1].second);
        if ((hole.a[1].second -= cnt) == 0) hole.pop();
      }
      num -= cnt, ans += cost * cnt, mice.push(make_pair(-cost - s, cnt));
    }
    while (num < 0) {
      cost = 0, cnt = -num;
      if (mice.len && (t = mice.a[1].first + s) < cost) {
        cost = t, cnt = min(cnt, mice.a[1].second);
        if ((mice.a[1].second -= cnt) == 0) mice.pop();
      }
      num += cnt, ans += cost * cnt, hole.push(make_pair(-cost - s, cnt));
    }
  }
  printf("%I64d", ans);
  return 0;
}
