#include<bits/stdc++.h>
using namespace std;
#define lc k << 1
#define rc k << 1 | 1
#define lcon lc , l , mid
#define rcon rc , mid + 1, r
#define Mid int mid = (l + r) >> 1
#define N 2000008
#define int long long
int n , m;
int a[N];
int tree[N << 2] , add[N << 2];
void build(int k, int l , int r) {
if(l == r) {
tree[k] = a[l];
return ;
}
Mid;
build(lcon) , build(rcon);
tree[k] = min(tree[lc] , tree[rc]);
}
void Add(int k , int v) {
tree[k] += v;
add[v] += v;
}
void pushdown(int k) {
if(!add[k]) return ;
Add(lc , add[k]);
Add(rc , add[k]);
add[k] = 0;
}
void modify(int k , int l ,int r , int x ,int y , int v) {
if(x <= l && r <= y) {
Add(k , v);
return ;
}
Mid;
pushdown(k);
if(x <= mid) modify(lcon , x, y , v);
if(y > mid) modify(rcon , x , y , v);
tree[k] = min(tree[lc] , tree[rc]);
}
signed main() {
cin >> n >> m;
for(int i = 1;i <= n;i++) {
cin >> a[i];
}
build(1 , 1 ,n);
for(int i = 1;i <= m;i++) {
int d , l , r;
cin >> d >> l >> r;
modify(1 , 1 , n , l , r , -d);
if(tree[1] < 0) {
cout << -1 << endl << i;
return 0;
}
}
cout << 0;
return 0;
}