#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e6+10;
int ql,qr;
struct seg{
int minx[maxn*4],add[maxn*4];
void maintain(int o,int L,int R){
int lc=o*2,rc=o*2+1,mid=(L+R)/2;
minx[o]=min(minx[lc],minx[rc])+add[o];
}
void pushdown(int o,int L,int R){
int lc=o*2,rc=o*2+1,mid=(L+R)/2;
add[lc]+=add[o];
add[rc]+=add[o];
add[o]=0;
maintain(lc,L,mid);
maintain(rc,mid+1,R);
maintain(o,L,R);
}
int query(int o,int L,int R){
int lc=o*2,rc=o*2+1,mid=(L+R)/2;
if(ql<=L&&qr>=R)return minx[o];//!!
int ans=1000000000;
if(ql<=mid){
pushdown(o,L,R);
ans=min(query(lc,L,mid),ans);
}
if(qr>mid){
pushdown(o,L,R);
ans=min(query(rc,mid+1,R),ans);
}
return ans;
}
void update(int o,int L,int R,int v){
int lc=o*2,rc=o*2+1,mid=(L+R)/2;
if(ql<=L&&qr>=R){
add[o]+=v;
maintain(o,L,R);
return;
}
if(ql<=mid)update(lc,L,mid,v);
if(qr>mid)update(rc,mid+1,R,v);
maintain(o,L,R);
}
}t;
int main(){
freopen("classroom.in","r",stdin);
freopen("classroom.out","w",stdout);
int n,m;
ios::sync_with_stdio(false);
ios::tie(false);
cin>>n>>m;
for(int i=1,a;i<=n;++i){
ql=qr=i;
cin>>a;
t.update(1,1,n,a);
}
for(int i=1,v;i<=m;++i){
cin>>v>>ql>>qr;
if(v>t.query(1,1,n)){
cout<<-1<<endl<<i;
return 0;
}
t.update(1,1,n,-v);
}
cout<<0;
return 0;
}
T 了两个点/fad