#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 7;
long long tr[4 * N], lz[4 * N];
inline void propagate(int u, int st, int en) {
  tr[u] += lz[u];
  if (st != en) {
    lz[2 * u] += lz[u];
    lz[2 * u + 1] += lz[u];
  }
  lz[u] = 0;
}
void update(int u, int st, int en, int l, int r, long long inc) {
  if (r < st || en < l)
    propagate(u, st, en);
  else if (l <= st && en <= r)
    lz[u] += inc, propagate(u, st, en);
  else {
    propagate(u, st, en);
    int m = (st + en) / 2;
    update(2 * u, st, m, l, r, inc);
    update(2 * u + 1, m + 1, en, l, r, inc);
    tr[u] = max(tr[2 * u], tr[2 * u + 1]);
  }
}
long long query(int u, int st, int en, int l, int r) {
  if (r < st || en < l)
    return 0;
  else if (l <= st && en <= r) {
    propagate(u, st, en);
    return tr[u];
  } else {
    propagate(u, st, en);
    int m = (st + en) / 2;
    long long a = query(2 * u, st, m, l, r);
    long long b = query(2 * u + 1, m + 1, en, l, r);
    return max(a, b);
  }
}
int a[N];
long long sum[N];
vector<pair<int, int> > races[N];
long long dp[N];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    sum[i] = sum[i - 1] + a[i];
  }
  while (m--) {
    int l, r, x;
    cin >> l >> r >> x;
    races[r].push_back({l, x});
  }
  for (int i = 1; i <= n; i++) {
    for (pair<int, int> pr : races[i])
      update(1, 0, n, 0, pr.first - 1, pr.second);
    dp[i] = max(dp[i - 1], query(1, 0, n, 0, n) - sum[i]);
    update(1, 0, n, i, i, dp[i] + sum[i]);
  }
  cout << dp[n] << endl;
}
