https://codeforces.com/contest/1690/problem/G
/*input
3
4 2
6 2 3 7
3 2
4 7
5 4
10 13 5 2 6
2 4
5 2
1 5
3 2
13 4
769 514 336 173 181 373 519 338 985 709 729 702 168
12 581
6 222
7 233
5 117
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int a[N];
struct RMQ{
int a[N<<2]={0},tag[N<<2]={0};
void build(int top,int l,int r,int *f){
int mid=l+r>>1;
if(l==r) a[top]=f[l];
else{
build(top<<1, l, mid,f);
build(top<<1|1,mid+1,r ,f);
}
}
void down(int top){
tag[top]=0;tag[top<<1]=1;tag[top<<1|1]=1;
a[top<<1]=a[top<<1|1]=a[top];
}
void update(int top,int l,int r,int L,int R,int x){
if(L==l&&r==R){
a[top]=x;tag[top]=1;return ;
}
if(tag[top]) down(top);
int mid=l+r>>1;
if(mid >=R) update(top<<1,l,mid, L,R,x);
else if(mid+1<=L) update(top<<1|1,mid+1,r,L,R,x);
else{
update(top<<1 ,l,mid, L,mid,x);
update(top<<1|1,mid+1,r,mid+1,R,x);
}
}
int query(int top,int l,int r,int idx){
if(l==r) return a[top];
if(tag[top]) down(top);
int mid=l+r>>1;
if(mid>=idx) return query(top<<1 , l,mid,idx);
else return query(top<<1|1,mid+1,r,idx);
}
};
RMQ Lx,Rx;
int read(){
int ans=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') ans=ans*10+c-'0',c=getchar();
return ans;
}
void solve(){
int n,m,ans=0;
n=read();
m=read();
for(int i=1;i<=n;i++) a[i]=read();
int l=1,r;
while(l<=n){
r=l;
while(r<n&&a[r+1]>=a[l]) r++;
Lx.update(1,1,n,l,r,l);
Rx.update(1,1,n,l,r,r);
l=r+1;
ans++;
}
for(int i=1;i<=m;i++){
int idx,p;cin>>idx>>p;
int l=Lx.query(1,1,n,idx);
int r=Rx.query(1,1,n,idx);
a[idx]-=p;
if(a[idx]<a[l]){
ans++;
Rx.update(1,1,n,l,idx-1,idx-1);
Lx.update(1,1,n,idx,r, idx);
}
while(r+1<=n&&a[idx]<=a[r+1]){
ans--;
r=Rx.query(1,1,n,r+1);
Lx.update(1,1,n,idx,r,idx);
Rx.update(1,1,n,idx,r,r );
}
printf("%d ",ans);
}
puts("");
}
int main(){
int t;cin>>t;
while(t--) solve();
}