#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
vector<pair<int, int>> vc[MAXN];
long long dp[MAXN], lz[MAXN << 2], seg[MAXN << 2], c[MAXN];
int n, m;
void input();
void upd(int, int, long long, int, int, int);
void LZ(int);
void solve();
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  input();
  solve();
  return 0;
}
void input() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> c[i];
  for (int i = 0; i < m; i++) {
    int l, r, p;
    cin >> l >> r >> p;
    vc[r].push_back({l, p});
  }
}
void LZ(int v) {
  seg[v << 1] += lz[v];
  seg[v << 1 | 1] += lz[v];
  lz[v << 1] += lz[v];
  lz[v << 1 | 1] += lz[v];
  lz[v] = 0;
}
void upd(int l, int r, long long x, int v, int s, int e) {
  if (r <= s || e <= l) return;
  if (l <= s && e <= r) {
    seg[v] += x;
    lz[v] += x;
    return;
  }
  int mid = (s + e) / 2;
  LZ(v);
  upd(l, r, x, v << 1, s, mid);
  upd(l, r, x, v << 1 | 1, mid, e);
  seg[v] = max(seg[v << 1], seg[v << 1 | 1]);
}
void solve() {
  for (int i = 1; i <= n; i++) {
    upd(0, i, -c[i - 1], 1, 0, n);
    for (auto j : vc[i]) upd(0, j.first, j.second, 1, 0, n);
    dp[i] = max(seg[1], dp[i - 1]);
    upd(i + 1, i + 2, dp[i], 1, 0, n);
  }
  cout << dp[n] << endl;
}
