#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 5;
const int MOD = 1e9 + 7;
int power(int a, int b, int m = MOD) {
  if (b == 0) return 1;
  if (b == 1) return a;
  int x = power(a, b / 2, m) % m;
  x = (x * x) % m;
  if (b % 2) return (x * a) % m;
  return x;
}
long long n, m, mice[N], dp[2][N], cost[N];
pair<long long, long long> holes[N];
void solve(long long row, long long second, long long e, long long l,
           long long r) {
  if (second > e) return;
  long long mid = (second + e) / 2;
  long long opt = mid - 1;
  long long ret = dp[(row + 1) % 2][mid] + cost[mid - 1];
  for (long long a = max(mid, l); a <= min(r, mid + holes[row].second - 1);
       a++) {
    long long newcost = dp[(row + 1) % 2][a + 1] + cost[a];
    if (newcost < ret) {
      ret = newcost;
      opt = a;
    }
  }
  dp[row % 2][mid] = ret - cost[mid - 1];
  solve(row, second, mid - 1, l, opt);
  solve(row, mid + 1, e, opt, r);
}
int main() {
  scanf("%lld%lld", &n, &m);
  for (long long a = 1; a <= n; a++) scanf("%lld", &mice[a]);
  sort(mice + 1, mice + n + 1);
  for (long long a = 1; a <= m; a++)
    scanf("%lld%lld", &holes[a].first, &holes[a].second);
  sort(holes + 1, holes + m + 1);
  long long tmp = (m + 1) % 2;
  for (long long a = 1; a <= n; a++) dp[tmp][a] = 1e18;
  for (long long a = m; a >= 1; a--) {
    for (long long b = 1; b <= n; b++)
      cost[b] = cost[b - 1] + abs(holes[a].first - mice[b]);
    solve(a, 1, n, 1, n);
  }
  if (dp[1][1] == 1e18)
    printf("-1\n");
  else
    printf("%lld\n", dp[1][1]);
  return 0;
}
