#include <bits/stdc++.h>
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
namespace IO {
const int L = 1 << 15;
char ibuf[L | 1], *iS = ibuf, *iT = ibuf, obuf[L | 1], *oS = obuf,
                  *oT = obuf + L, c, st[66];
int tp = 0, f;
inline char gc() {
  if (iS == iT) iT = (iS = ibuf) + fread(ibuf, sizeof(char), L, stdin);
  return (*iS++);
}
inline void flush() {
  fwrite(obuf, sizeof(char), oS - obuf, stdout);
  oS = obuf;
}
inline void pc(char c) {
  *oS++ = c;
  if (oS == oT) flush();
}
inline long long rd() {
  long long x = 0;
  f = 1, c = gc();
  for (; !isdigit(c); c = gc())
    if (c == '-') f = -1;
  for (; isdigit(c); c = gc()) x = (x << 1) + (x << 3) + (c & 15);
  return x * f;
}
inline void write(long long x) {
  if (!x) pc('0');
  if (x < 0) pc('-'), x = -x;
  while (x) st[++tp] = x % 10 + '0', x /= 10;
  while (tp) pc(st[tp--]);
}
inline void writeln(long long x) {
  write(x);
  pc('\n');
}
struct IOflusher {
  ~IOflusher() { flush(); }
} _ioflusher_;
}  // namespace IO
using IO::gc;
using IO::pc;
using IO::rd;
using IO::write;
using IO::writeln;
int n, m, sum;
int a[5005], q[5005];
long long s[5005], f[5005][5005];
struct jdb {
  int x, y;
} b[5005];
bool cmp(jdb a, jdb b) { return a.x < b.x; }
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &b[i].x, &b[i].y);
    sum += b[i].y;
  }
  if (sum < n) return puts("-1"), 0;
  sort(b + 1, b + m + 1, cmp);
  for (int i = 1; i <= n; i++) f[0][i] = 1e18;
  for (int i = 1; i <= m; i++) {
    for (int j = 1; j <= n; j++) s[j] = s[j - 1] + abs(b[i].x - a[j]);
    int h = 1, t = 0;
    for (int j = 0; j <= n; j++) {
      if (h <= t && q[h] < j - b[i].y) h++;
      for (; h <= t && f[i - 1][j] - s[j] <= f[i - 1][q[t]] - s[q[t]]; t--)
        ;
      q[++t] = j;
      f[i][j] = f[i - 1][q[h]] - s[q[h]] + s[j];
    }
  }
  writeln(f[m][n]);
}
