// Author: pppssslc
// Date: 18/04/2026
#include<bits/stdc++.h>

using namespace std;

template<class X, class Y> void mini(X &x, const Y &y){
  x = min(x, y);
}

template<class X, class Y> void maxi(X &x, const Y &y){
  x = max(x, y);
}

typedef string str;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef double db;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pldld;
typedef pair<db, db> pdd;
typedef pair<char, char> pcc;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<char> vc;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<vector<int>> vii;
typedef vector<vector<ll>> vll;
typedef vector<vector<char>> vcc;
typedef map<int, int> mpii;
typedef map<ll, ll> mpll;
typedef set<int> si;
typedef set<ll> sl;
typedef complex<ld> cd;

#define se second
#define fi first
#define Rep(i, l, r, x) for(int i = l; i < (int)r; i += x)
#define Repd(i, l, r, x) for(int i = l; i > (int)r; i -= x)
#define For(i, l, r, x) for(int i = l; i <= (int)r; i += x)
#define Ford(i, l, r, x) for(int i = l; i >= (int)r; i -= x)
#define Fore(x, a) for(auto x: a)
#define pb push_back
#define pf push_front
#define ppb pop_back
#define ppf pop_front
#define ins insert
#define era erase
#define upb upper_bound
#define lwb lower_bound
#define all(a) a.begin(), a.end()

const db PI = acos(-1);
const ll inf = 1e18 + 1;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 2;

int n, q;
ll x[maxn], res;
pll c[maxn];

signed main(){
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr); cout.tie(nullptr);
  if(fopen("D:/inp.txt", "r"))
      freopen("D:/inp.txt", "r", stdin),
      freopen("D:/out.txt", "w", stdout);
  cin >> n >> q;
  For(i, 1, n, 1) cin >> x[i];
  For(i, 1, q, 1){
      ll l, r; cin >> l >> r;
      ++c[l].fi; --c[r + 1].fi;
  }
  c[0] = {0, 0};
  For(i, 1, n, 1) c[i].se = i;
  For(i, 1, n, 1) c[i].fi += c[i - 1].fi;
  sort(c + 1, c + n + 1);
  sort(x + 1, x + n + 1);
  For(i, 1, n, 1) res += c[i].fi * x[i];
  cout << res;
  cerr << "TIME ELAPSED: " << 1.0 * clock() / CLOCKS_PER_SEC << "s.\n";
  return 0;
}
