#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define maxn 1000010
int n,m,r[maxn],opv,opx,opy,cnt;
struct node{
int l,r,v,lazy;
}tr[maxn*4];
void build(int k,int l,int r){
tr[k].l=l,tr[k].r=r;
if(l==r){
scanf("%d",&tr[k].v);return;
}
int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
tr[k].v=min(tr[k<<1].v,tr[k<<1|1].v);
}
void down(int k){
int now=tr[k].lazy;
tr[k].lazy=0;
tr[k<<1].v-=now;
tr[k<<1].lazy+=now;
tr[k<<1|1].v-=now;
tr[k<<1|1].lazy+=now;
}
void add(int k){
if(tr[k].l>=opx&&tr[k].r<=opy){
tr[k].v-=opv;
tr[k].lazy+=opv;
return;
}
if(tr[k].lazy)down(k);
int mid=(tr[k].l+tr[k].r)>>1;
if(opx<=mid)add(k<<1);
if(opy>=mid+1)add(k<<1|1);
tr[k].v=min(tr[k<<1].v,tr[k<<1|1].v);
}
int main(){
freopen("classrooms.in","r",stdin);
freopen("classrooms.out","w",stdout);
scanf("%d%d",&n,&m);
build(1,1,n);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&opv,&opx,&opy);
add(1);
if(tr[1].v<0){
cout<<"-1"<<endl;
cout<<i;return 0;
}
}
cout<<0;
return 0;
}