#include<stdio.h>
int a[1000001],b[1000002],q1[1000001],q2[1000001],l1,l2,r1,r2,n;
inline void init(){
l1=1,r1=n,l2=1,r2=0,b[0]=0,b[n+1]=0x3f3f3f3f;
for(int i=1;i<=n;++i)q1[i]=i,q2[i]=0,b[i]=a[i];
}
inline int cmp(int x,int y){return b[x]==b[y]?x>y:b[x]>b[y];}
inline int min(int x,int y){return cmp(x,y)?y:x;}
inline int max(int x,int y){return cmp(x,y)?x:y;}
inline int mx1(){return l1<=r1?q1[r1]:0;}
inline int mx2(){return l2<=r2?q2[r2]:0;}
inline int mn1(){return l1<=r1?q1[l1]:n+1;}
inline int mn2(){return l2<=r2?q2[l2]:n+1;}
int res=0;
void work(){
init();
int flag=-1,cnt=0;
for(int i=n;i>1;--i){
if(i==2){
cnt+=!(~flag);
break;
}
int mx=max(mx1(),mx2()),mn=min(mn1(),mn2());
if(l1<=r1&&q1[r1]==mx)--r1;
else --r2;
if(l1<=r1&&q1[l1]==mn)++l1;
else ++l2;
b[mx]-=b[mn];
if(cmp(min(mn1(),mn2()),mx)){
if(~flag)flag^=1;
else flag=0;
}else{
if(~flag)break;
++cnt;
}
q2[++r2]=mx;
}
printf("%d\n",n-cnt-((~flag)?flag:0));
}
int main(){
int t,x,y,k;
scanf("%d%d",&t,&n);
for(int i=1;i<=n;++i)scanf("%d",a+i);
for(init(),work();--t;work())
for(scanf("%d",&k);k--;)
scanf("%d%d",&x,&y),a[x]=y;
return 0;
}