#include<bits/stdc++.h>
using namespace std;
int n,m;
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0') f^=(c=='-'),c=getchar();
while(c>'/') x=(x<<3)+(x<<1)+(c^'0'),c=getchar();
return f?x:-x;
}
struct node{
int l,r,tag,mn;
}stt[4000010];
int a[1000010];
inline void add(int k,int l,int r){
stt[k].l=l;stt[k].r=r;
if(l==r){
stt[k].mn=a[l];
return ;
}
int mid=(l+r)>>1;
add(k<<1,l,mid);
add(k<<1|1,mid+1,r);
stt[k].mn=min(stt[k<<1|1].mn,stt[k<<1].mn);
}
inline void pushdown(int k){
stt[k<<1].mn-=stt[k].tag;
stt[k<<1|1].mn-=stt[k].tag;
stt[k<<1].tag+=stt[k].tag;
stt[k<<1|1].tag+=stt[k].tag;
stt[k].tag=0;
//stt[k].mn=min(stt[k<<1].mn,stt[k<<1|1].mn);
}
inline void mod(int k,int l,int r,int x){
if(stt[k].l>=l&&stt[k].r<=r){
stt[k].mn-=x;
stt[k].tag+=x;
return ;
}
if(stt[k].tag)pushdown(k);
int mid=(stt[k].l+stt[k].r)>>1;
if(l<=mid)mod(k<<1,l,r,x);
if(r>mid)mod(k<<1|1,l,r,x);
stt[k].mn=min(stt[k<<1].mn,stt[k<<1|1].mn);
}
int main(){
n=read();
m=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
add(1,1,n);
for(int i=1;i<=m;i++){
int d=read(),s=read(),t=read();
mod(1,s,t,d);
int q=stt[1].mn;//query(1,s,t);
//printf("%d\n",q);
if(q<0){
puts("-1");
printf("%d\n",i);
return 0;
}
}
puts("0");
return 0;
}