/**
 * 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;
}