/**
* Author: Sergey Kopeliovich (Burunduk30@gmail.com)
*/
#include <bits/stdc++.h>
using namespace std;
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
#define fornd(i, n) for (int i = (int)(n) - 1; i >= 0; i--)
#define all(a) (a).begin(), (a).end()
typedef long long ll;
struct Value {
int ma1, ma2, pos;
void calc( const Value &l, const Value &r ) {
pos = l.ma1 > r.ma1 ? l.pos : r.pos;
int a[] = {l.ma1, r.ma1, l.ma2, r.ma2};
sort(a, a + 4);
ma1 = a[3], ma2 = a[2];
}
};
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
int n, m, l, r;
cin >> n;
vector<Value> t(2 * n);
forn(i, n)
cin >> t[i + n].ma1, t[i + n].pos = i;
fornd(i, n)
t[i].calc(t[2 * i], t[2 * i + 1]);
ll ans = 0;
vector<ll> dif(n, 0);
cin >> m;
forn(i, m) {
Value res = {0, 0, 0};
cin >> l >> r, l--, r--;
for (l += n, r += n; l <= r; l >>= 1, r >>= 1) {
if ((l & 1) == 1) res.calc(res, t[l++]);
if ((r & 1) == 0) res.calc(res, t[r--]);
}
ans += res.ma1;
dif[res.pos] += (res.ma1 - res.ma2);
}
cout << ans - *max_element(all(dif)) << endl;
return 0;
}