#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=4000100;
int a[maxn];
int n;
int main()
{
int T;scanf("%d",&T);
for(int t=1;t<=T;t++)
{
if(t==1)
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
}
else
{
int k;scanf("%d",&k);
for(int i=1;i<=k;i++)
{
int a1,y;scanf("%d%d",&a1,&y);
a[a1]=y;
}
}
deque<pair<int,int> >q1,q2;
for(int i=1;i<=n;i++) q1.push_back({a[i],i});
int ans;
while(1)
{
if(q1.size()+q2.size()==2)
{
ans=1;
break;
}
int x,y,id;
y=q1.front().first;q1.pop_front();//动作在前面
if(q2.empty()||!q1.empty()&&q1.back()>q2.back())
{
x=q1.back().first,id=q1.back().second,q1.pop_back();
}
else
{
x=q2.back().first,id=q2.back().second,q2.pop_back();
}
//注意pair的定义
pair<int,int> now=make_pair(x-y,id);
if(q1.empty()||now<q1.front())
{
ans=q1.size()+q2.size()+2;
int cnt=0;
while(1)
{
cnt++;
if(q1.size()+q2.size()==1)
{
if(cnt%2==0) ans--;
break;
}
int x,id;
if(q2.empty()||!q1.empty()&&q1.back()>q2.back())
{
x=q1.back().first,id=q1.back().second,q1.pop_back();
}
else
{
x=q2.back().first,id=q2.back().second,q2.pop_back();
}
now={x-now.first,id};//x取出来是大的
if((now<q1.front()||q1.empty())&&(now<q2.front()||q2.empty()))
{
;
}
else
{
if(cnt%2==0) ans--;
break;
}
}
break;
}
else q2.push_front(now);
}
printf("%d\n",ans);
}
return 0;
}