#include<cstdio>
#include<algorithm>
#define mp make_pair
#define N 1145144
#define pni pair<node,int>
using namespace std;
int T;
int n,k;
struct node{
int val,id;
bool operator<(const node &a)const{return val==a.val?id<a.id:val<a.val;}
node operator-(const node &a)const{return (node){val-a.val,id};}
}a[N];
node q1[N],q2[N];
int l1,r1,l2,r2;
//l大r小
//int:0:1l,1:1r,2:2l,3:2r,4:1r+1,5:2r+1;
pni getmax(){
if(l2>r2)return mp(q1[l1],0);
if(l1>r1)return mp(q2[l2],2);
if(q1[l1]<q2[l2])return mp(q2[l2],2);
else return mp(q1[l1],0);
}
pni getmin(){
if(l2>r2)return mp(q1[r1],1);
if(l1>r1)return mp(q2[r2],3);
if(q1[r1]<q2[r2])return mp(q1[r1],1);
else return mp(q2[r2],3);
}
pni aa[4];
pni getcmn(){
int tot=0;
if(l1<=r1)aa[++tot]=mp(q1[r1],1);
if(l2<=r2)aa[++tot]=mp(q2[r2],3);
if(r1-l1+1>=2)aa[++tot]=mp(q1[r1-1],4);
if(r2-l2+1>=2)aa[++tot]=mp(q2[r2-1],5);
sort(aa+1,aa+tot+1);
return aa[2];
}
void del(pni x){
int typ=x.second;
if(typ==0)l1++;
if(typ==2)l2++;
if(typ==1)r1--;
if(typ==3)r2--;
}
void add(node x){q2[++r2]=x;}
bool isgo(){
if(r1-l1+1+r2-l2+1==2)return 1;
pni x=getmin(),y=getmax(),z=getcmn();
if(!(y.first-x.first<z.first))return 1;
del(y);del(x);
add(y.first-x.first);
return !isgo();
}
signed main(){
//freopen("P7078_5.in","r",stdin);
scanf("%d",&T);
while(T--){
if(!n){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i].val),a[i].id=i;
}else{
scanf("%d",&k);
for(int i=1;i<=k;i++){
int id,val;
scanf("%d%d",&id,&val);
a[id].val=val;
}
}
l1=1,l2=1;r1=n,r2=0;
for(int i=1;i<=n;i++)q1[n-i+1]=a[i];
int flg=0;
while(1){
pni x=getmin(),y=getmax(),z=getcmn();
if(y.first-x.first<z.first)break;
del(x);del(y);
add(y.first-x.first);
}
int ans=r1-l1+1+r2-l2+1;
if(isgo())printf("%d\n",ans-1);
else printf("%d\n",ans);
}
return 0;
}