#include <bits/stdc++.h>
using namespace std;
const long long maxn = 2e5 + 5;
long long seg[4 * maxn], lazy[4 * maxn], a[maxn];
vector<pair<long long, long long> > vec[maxn];
void relax(long long id) {
  long long x = lazy[id];
  lazy[id] = 0;
  seg[2 * id + 0] += x;
  lazy[2 * id + 0] += x;
  seg[2 * id + 1] += x;
  lazy[2 * id + 1] += x;
}
void add(long long id, long long L, long long R, long long l, long long r,
         long long val) {
  if (R <= l || r <= L) return;
  if (L >= l && R <= r) {
    seg[id] += val;
    lazy[id] += val;
    return;
  }
  long long mid = (L + R) / 2;
  relax(id);
  add(2 * id + 0, L, mid, l, r, val);
  add(2 * id + 1, mid, R, l, r, val);
  seg[id] = max(seg[2 * id], seg[2 * id + 1]);
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long n, m;
  cin >> n >> m;
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (long long i = 0; i < m; i++) {
    long long l, r, p;
    cin >> l >> r >> p;
    l--;
    r--;
    vec[r].push_back(pair<long long, long long>(l, p));
  }
  long long bl = 0;
  for (long long i = 0; i < n; i++) {
    add(1, 0, n, i, i + 1, bl);
    bl = max(bl, seg[1]);
    add(1, 0, n, 0, i + 1, -a[i]);
    for (pair<long long, long long> P : vec[i]) {
      add(1, 0, n, 0, P.first + 1, P.second);
    }
  }
  cout << max(bl, seg[1]);
}
