// huu khanh chy
// #pragma once
// #pragma GCC optimize("Os")
// #pragma GCC optimize("O2")
// #pragma GCC target("fma")
// #pragma GCC target("sse,sse2")
// #pragma GCC target("sse3,ssse3")
// #pragma GCC target("sse4.1,sse4.2")
// #pragma GCC target("bmi,bmi2")
// #pragma GCC target("popcnt,lzcnt")
// #pragma GCC optimize("inline")
// #pragma GCC optimize("fast-math")
// #pragma GCC optimize("Ofast")
// #define anhnguyet_huukhanh
#ifdef anhnguyet_huukhanh
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx,avx2")
#endif
#include <bits/stdc++.h>
#define FOR(i, n) for(long long (i) = 0; (i) < (n); ++(i))
#define forr(i, l, r) for (long long i = (l); i <= (r); ++i)
#define rfor(i, r, l) for (long long i = (r); i >= (l); --i)
#define SORT(a) sort((a).begin(), (a).end())
#define RSORT(a) sort((a).begin(), (a).end(), greater<long long>())
#define sortt(a, type) sort((a).begin(), (a).end(), type)
#define for_Cout(a, char) for (auto c : (a)) cout << c << char;
#define REV(s) reverse((s).begin(), (s).end())
#define mset(a, valueptr) memset(a, valueptr, sizeof a)
#define biton(x, i) ((x) >> (i) & 1)
#define MASK(i) (1ll << (i))
#define TIME cerr << "Time: " << 1.0 * clock() / CLOCKS_PER_SEC << "s\n"
#define F first
#define S second
#define pub push_back
#define ins insert
#define All(x) (x).begin(), (x).end()
#define pii pair<int, int>
#define pli pair<long long, int>
#define pll pair<long long, long long>
#define vll vector<long long>
#define vit vector<int>
#define vbl vector<bool>
#define vstr vector<string>
#define v(datatype) vector<datatype>
#define vvll vector<vector<long long>>
#define TASK "name"
template<typename... value> void inall(value&... valueofvalue) { ((std::cin >> valueofvalue), ...); }
template<typename... value> void outall(char valueofchar, const value&... valueofvalue) { ((std::cout << valueofvalue << valueofchar), ...); std::cout << valueofchar; }
template<class X, class Y> bool maximize(X& x, const Y& y) { if (x < y) { x = y; return true; } return false; }
template<class X, class Y> bool minimize(X& x, const Y& y) { if (x > y) { x = y; return true; } return false; }
using namespace std;
inline void fastIO() noexcept(true) { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }
inline long long ucln(long long a, long long b) { while (a != 0) { long long uc = a; a = b % a ; b = uc; } return b; }
inline long long bcnn(long long a, long long b) { long long res = (a * b) / ucln(a, b); return res; }
inline long long luythua(long long a, long long b) { long long res = 1; while (b) { if (b & 1) { res *= a; } a = a * a; b >>= 1; } return res; }
inline long long giathua(long long num) { unsigned long long res = 1; for (unsigned long long i = 2; i <= num; ++i) res *= i; return res; }
inline long long luythualaydu (long long a, long long b, long long mod) { long long res = 1; a = a % mod; while (b > 0) { if (b & 1) { res = (res * a) % mod; } a = (a * a) % mod; b >>= 1; } return res; }
inline long long giathualaydu (long long num, long long mod) { unsigned long long res = 1; for (unsigned long long i = 2; i <= num; ++i) res = (res * i) % mod; return res; }
typedef short sh;
typedef char cr;
typedef string str;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef bool bl;
typedef long double ldb;
constexpr long long MOD1 = 1000000007LL;
constexpr long long MOD2 = 1000000009LL;
constexpr long long MOD3 = 2147483647LL;
constexpr long long INF = 1000000000000000000LL;
constexpr int base1= 310;
constexpr int base2 = 256;
constexpr long long MAXn = 300007;
int n, m;
vector<int> a(MAXn);
vector<pair<int, int>> b(MAXn);
vector<int> diff_(MAXn);
vector<int> cnt(MAXn);
int main() {
if (fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
cin >> n >> m;
for (int i = 1; i <= n; ++i) cin >> a[i];
for (int i = 0; i < m; ++i) {
cin >> b[i].first >> b[i].second;
diff_[b[i].first]++;
diff_[b[i].second + 1]--;
}
for (int i = 1; i <= n; ++i) {
cnt[i] = cnt[i - 1] + diff_[i];
}
sort(cnt.begin() + 1, cnt.begin() + n + 1);
sort(a.begin() + 1, a.begin() + n + 1);
ll total = 0;
for (int i = 1; i <= n; ++i) {
total += cnt[i] * a[i];
}
cout << total << '\n';
return 0;
}