#include<bits/stdc++.h>
using namespace std;
#define mid ((l+r)>>1)
const int maxn=1000010;
int n,m,t[maxn<<2],ad[maxn<<2],a[maxn],res,r1,r2,r3;
void build(int rt,int l,int r)
{
if(l==r)
{
t[rt]=a[l];
return;
}
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
t[rt]=min(t[rt<<1],t[rt<<1|1]);
}
void pushdown(int rt)
{
t[rt<<1]+=ad[rt];
t[rt<<1|1]+=ad[rt];
ad[rt<<1]+=ad[rt];
ad[rt<<1|1]+=ad[rt];
ad[rt]=0;
t[rt]=min(t[rt],min(t[rt<<1],t[rt<<1|1]));
}
void update(int rt,int l,int r,int L,int R,int k)
{
if(L<=l&&r<=R)
{
ad[rt]+=k;
t[rt]+=k;
return;
}
if(ad[rt])pushdown(rt);
if(L<=mid)update(rt<<1,l,mid,L,R,k);
if(mid+1<=R)update(rt<<1|1,mid+1,r,L,R,k);
t[rt]=min(t[rt<<1],t[rt<<1|1]);
}
void query(int rt,int l,int r,int L,int R)
{
if(L<=l&&r<=R)
{
res=min(res,t[rt]);
return;
}
if(ad[rt])pushdown(rt);
if(L<=mid)query(rt<<1,l,mid,L,R);
if(mid+1<=R)query(rt<<1|1,mid+1,r,L,R);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&r1,&r2,&r3);
res=1e9+10;
query(1,1,n,r2,r3);
if(res<r1)
{
printf("-1\n%d",i);
return 0;
}
else update(1,1,n,r2,r3,-r1);
}
printf("0");
return 0;
}