#include <bits/stdc++.h>
using namespace std;
const long long M = 1e9 + 7, maxn = 2e5 + 50;
long long int ans, q, k, n, m, x, y, seg[maxn * 4], lazzy[maxn * 4], dp[maxn];
std::vector<long long int> vv;
void put(long long int id, long long int val) {
  seg[id] += val;
  lazzy[id] += val;
}
void shift(long long int l, long long int r, long long int id) {
  if (r - l > 1 && lazzy[id] != 0) {
    put(id * 2, lazzy[id]), put(id * 2 + 1, lazzy[id]);
  }
  lazzy[id] = 0;
}
void upd(long long int s, long long int e, long long int val,
         long long int id = 1, long long int l = 0, long long int r = n + 1) {
  if (s >= r || l >= e) return;
  if (s <= l && r <= e) {
    put(id, val);
    return;
  }
  shift(l, r, id);
  long long int mid = l + r >> 1;
  upd(s, e, val, id * 2, l, mid), upd(s, e, val, id * 2 + 1, mid, r);
  seg[id] = max(seg[id * 2], seg[id * 2 + 1]);
}
long long int get(long long int s, long long int e, long long int id = 1,
                  long long int l = 0, long long int r = n + 1) {
  if (s >= r || l >= e) return 0;
  if (s <= l && r <= e) {
    return seg[id];
  }
  shift(l, r, id);
  long long int mid = l + r >> 1;
  return max(get(s, e, id * 2, l, mid), get(s, e, id * 2 + 1, mid, r));
}
void get4(long long int id = 1, long long int l = 0, long long int r = n + 1) {
  long long int mid = l + r >> 1;
  if (r - 1 == l) {
    vv.push_back(id);
    return;
  }
  get4(id * 2, l, mid), get4(id * 2 + 1, mid, r);
}
int32_t main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  long long int a[n + 1];
  for (long long int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  std::vector<pair<long long int, long long int> > v[n + 1];
  for (long long int i = 0; i < m; i++) {
    cin >> x >> y >> k;
    v[y].push_back({x, k});
  }
  get4();
  for (long long int i = 1; i <= n; i++) {
    upd(0, i, -a[i]);
    for (auto j : v[i]) {
      upd(0, j.first, j.second);
    }
    upd(i, i + 1, dp[i - 1]);
    dp[i] = get(0, i + 1);
  }
  cout << dp[n];
  return 0;
}
