#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int N=1000006; struct tick{int st,en,ne;}; tick t[N];int m;int a[N],n,d[N]; bool check(const int &p){ memset(d,0,sizeof(d));int i; for(i=1;i<n;i++)d[i+1]=a[i+1]-a[i];d[1]=a[1]; for(i=1;i<=p;i++)d[t[i].st]-=t[i].ne,d[t[i].en+1]+=t[i].ne; for(i=1;i<=n;i++){d[i]+=d[i-1];if(d[i]<0)return false;} return true; } int main(){ scanf("%d%d",&n,&m); int i,le,ri; for(i=1;i<=n;i++)scanf("%d",a+i); for(i=1;i<=m;i++)scanf("%d%d%d",&t[i].ne,&t[i].st,&t[i].en); le=1,ri=m; if(check(m)){printf("0\n");return 0;} while(le<ri) if(check((le+ri)>>1))le=((le+ri)>>1)+1; else ri=((le+ri)>>1); printf("-1\n%d\n",le); return 0; } /************************************************************** Problem: 2319 User: admin Language: C++ Result: Accepted Time:3359 ms Memory:20676 kb ****************************************************************/