#include <bits/stdc++.h>
using namespace std;
struct Node {
  long long p, c;
} hole[5050];
long long sum[5050], n, m, dp[5050][5050], mice[5050], pre[5050], que[5050];
bool compare1(Node x, Node y) { return x.p < y.p; }
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> mice[i];
  for (int i = 1; i <= m; i++) cin >> hole[i].p >> hole[i].c;
  sort(mice + 1, mice + n + 1);
  sort(hole + 1, hole + m + 1, compare1);
  for (int i = 1; i <= m; i++) pre[i] = pre[i - 1] + hole[i].c;
  if (pre[m] < n) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 0; i <= m; i++)
    for (int j = 0; j <= n; j++) dp[i][j] = 1e11;
  dp[0][0] = 0;
  for (int i = 1; i <= m; i++) {
    dp[i][0] = 0;
    int l = 0, r = 1;
    memset(que, 0, sizeof(que));
    for (int j = 1; j <= min(pre[i], n); j++) {
      dp[i][j] = dp[i - 1][j];
      sum[j] = sum[j - 1] + abs(mice[j] - hole[i].p);
      while (j - que[l] > hole[i].c) l++;
      while (l <= r && dp[i - 1][que[l]] - sum[que[l]] > dp[i - 1][j] - sum[j])
        l++;
      que[++r] = j;
      dp[i][j] = min(dp[i][j], dp[i - 1][que[l]] + sum[j] - sum[que[l]]);
    }
  }
  cout << dp[m][n] << endl;
}
