#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define bit(mask, i) (((mask) >> (i)) & 1)
#define BIT(n) ((1ll) << (n))
using namespace std;
const int maxn = 5e4;
const int maxm = 5;
const ll INF = 1e18;
int n, m, cnt[maxn + 10][maxm + 5];
ll S = 0, dp[maxn + 10][maxm + 5][BIT(maxm) + 5], a[maxn + 10];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("REPGAME.INP", "r"))
{
freopen("REPGAME.INP", "r", stdin);
freopen("REPGAME.OUT", "w", stdout);
}
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
S += a[i];
}
for (int i = 0; i < m; i++)
{
int l, r;
cin >> l >> r;
cnt[l][i]++;
cnt[r + 1][i]--;
}
for (int i = 1; i <= n; i++)
for (int j = 0; j < m; j++)
cnt[i][j] += cnt[i - 1][j];
for (int i = 0; i <= n; i++)
for (int j = 0; j <= m; j++)
for (int mask = 0; mask < BIT(m); mask++)
dp[i][j][mask] = -INF;
dp[0][m][0] = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j <= m; j++)
for (int mask = 0; mask < BIT(m); mask++)
{
if (dp[i][j][mask] == -INF)
continue;
// cout << i << ' ' << j << ' ' << mask << ' ' << dp[i][j][mask], el;
for (int new_j = 0; new_j < m; new_j++)
{
if (!bit(mask, new_j) && cnt[i + 1][new_j])
{
if (j == m) // open new_j
dp[i + 1][new_j][mask] = max(dp[i + 1][new_j][mask], dp[i][j][mask] + (m - new_j) * a[i + 1]);
else // close j va open new_j
dp[i + 1][new_j][mask | BIT(j)] = max(dp[i + 1][new_j][mask | BIT(j)], dp[i][j][mask] + (m - new_j) * a[i + 1]);
}
}
if (j == m) // noi tiep doan trong
dp[i + 1][j][mask] = max(dp[i + 1][j][mask], dp[i][j][mask]);
if (cnt[i + 1][j]) // noi tiep j
dp[i + 1][j][mask] = max(dp[i + 1][j][mask], dp[i][j][mask] + (m - j) * a[i + 1]);
// dong doan j
dp[i + 1][m][mask | BIT(j)] = max(dp[i + 1][m][mask | BIT(j)], dp[i][j][mask]);
}
ll ans = 0;
for (int j = 0; j <= m; j++)
for (int mask = 0; mask < BIT(m); mask++)
ans = max(ans, dp[n][j][mask]);
cout << S * m - ans;
}