#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 5001;
const int MAX_M = 5001;
const long long INF = 0x3f3f3f3f3f3f3f3fll;
struct hole {
  long long p, c;
};
bool operator<(const hole& h1, const hole& h2) { return h1.p < h2.p; }
int n, m;
long long x[MAX_N];
hole h[MAX_M];
long long dp[MAX_N][MAX_M];
long long s[MAX_N];
long long q[MAX_N];
long long ABS(long long x) { return x < 0 ? -x : x; }
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%I64d", &x[i]);
  int cap = 0;
  for (int i = 1; i <= m; i++)
    scanf("%I64d%I64d", &h[i].p, &h[i].c), cap += h[i].c;
  if (cap < n) {
    printf("-1");
    return 0;
  }
  sort(x + 1, x + n + 1);
  sort(h + 1, h + m + 1);
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= m; j++) {
      dp[i][j] = INF;
    }
  }
  dp[0][0] = 0;
  for (int j = 1; j <= m; j++) {
    int ql = 0, qr = -1;
    for (int i = 0; i <= n; i++) {
      if (i == 0)
        s[i] = 0;
      else
        s[i] = s[i - 1] + ABS(x[i] - h[j].p);
      while (ql <= qr && dp[q[qr]][j - 1] - s[q[qr]] >= dp[i][j - 1] - s[i])
        qr--;
      q[++qr] = i;
      while (i - q[ql] > h[j].c) ql++;
      dp[i][j] = dp[q[ql]][j - 1] + s[i] - s[q[ql]];
    }
  }
  printf("%I64d", dp[n][m]);
  return 0;
}
