#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#define N 1000005
using namespace std;
int w[N],n,k,T,ans;
struct snack1{
int j,id;
friend bool operator<(snack1 a,snack1 b)
{
return a.j<b.j||(a.j==b.j && a.id<b.id);
}
}s;
priority_queue <snack1> q;
struct snack2{
int j,id;
friend bool operator<(snack2 a,snack2 b)
{
return a.j>b.j||(a.j==b.j && a.id>b.id);
}
}b,sb;
priority_queue <snack2> z;
int read(){
int x=0,f=1; char c;
c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0' && c<='9'){
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return x*f;
}
void in(int p,int c){
snack1 f1; snack2 f2;
f1.j=f2.j=p; f1.id=f2.id=c;
q.push(f1); z.push(f2);
}
void get(){
z.pop(); s.j-=b.j;
in(s.j,s.id);
s=q.top(),b=z.top(); z.pop(); sb=z.top();
}
bool ok(int kg,int cnt){
if(ans<=1) return 0;
if(ans==2) return 1;
if(cnt==2){
if(kg%2) ans--;
return 0;
}
if(s.j-b.j>=sb.j||(s.j-b.j==sb.j && s.id>sb.id)){
if(kg==1) return 1;
else{
if(kg%2) ans--;
return 0;
}
}
get();
return ok(kg+1,cnt-1);
}
void battle(){
ans=n;
s=q.top(),b=z.top();
z.pop(); sb=z.top();
while(ok(1,ans)){
ans--;
get();
}
cout<<ans<<endl;
}
void loading(){
T=read(); n=read();
for(int i=1;i<=n;i++){ w[i]=read(); in(w[i],i); }
battle();
for(int i=1;i<T;i++){
while(q.size()) q.pop();
while(z.size()) z.pop();
k=read(); int a,c;
for(int j=1;j<=k;j++){
a=read(); c=read();
w[a]=c;
}
for(int j=1;j<=n;j++) in(w[j],j);
battle();
}
}
int main(){
loading();
return 0;
}