#include <bits/stdc++.h>
using namespace std;
long long x[5010], dp[5010][5010];
struct node {
  long long p, c;
  bool operator<(const node &a) const { return p < a.p; }
} h[5010];
long long s[5010], sum, q[5010];
int main() {
  int n, m, l, r;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%I64d", &x[i]);
  for (int i = 1; i <= m; i++) {
    scanf("%I64d%I64d", &h[i].p, &h[i].c);
    sum += h[i].c;
  }
  if (sum < n) return puts("-1"), 0;
  sort(x + 1, x + 1 + n);
  sort(h + 1, h + 1 + m);
  memset(dp, 60, sizeof(dp));
  dp[0][0] = 0;
  for (int i = 1; i <= m; i++) {
    l = 1, r = 0;
    q[0] = 0;
    for (int j = 0; j <= n; j++) {
      s[j] = (j ? s[j - 1] : 0) + abs(x[j] - h[i].p);
      while (l <= r && dp[i - 1][j] - s[j] <= dp[i - 1][q[r]] - s[q[r]]) r--;
      q[++r] = j;
      while (j - q[l] > h[i].c) l++;
      dp[i][j] = dp[i - 1][q[l]] + s[j] - s[q[l]];
    }
  }
  printf("%I64d\n", dp[m][n]);
  return 0;
}
