T飞了
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
long long dp[100001];
long long t;
long long n,m;
long long h[100001];
long long use[100001];
long long last[100001];
long long anss[100001];
long long x,y;
long long dfs(long long x,long long l){
if(x==n+1)
return 0;
if(l<h[x]){
if(use[x])
return dp[x];
use[x]=1;
return dp[x]=dfs(x+1,h[x])+1;
}
return dfs(x+1,l);
}
long long ans=0;
long long tmp;
long long solve(long long x,long long y){
ans=anss[x-1];
long long er;
if(y>last[x-1]){
ans++;
er=upper_bound(h+x+1,h+1+n+1,y)-h;
ans+=dp[er];
}else{
er=upper_bound(h+x+1,h+1+n+1,last[x-1])-h;
ans+=dp[er];
}
//cout<<er<<endl;
return ans;
}
int main(){
scanf("%lld",&t);
while(t--){
scanf("%lld%lld",&n,&m);
memset(h,0,sizeof(h));
for(long long i=1;i<=n;++i){
scanf("%lld",&h[i]);
}
h[n+1]=999999999;
memset(use,0,sizeof(use));
memset(dp,0,sizeof(dp));
memset(anss,0,sizeof(anss));
memset(last,0,sizeof(last));
if(n==1){
for(int i=1;i<=m;++i){
cout<<1<<endl;
}
continue;
}
for(long long i=1;i<=n;++i)
dfs(i,0);
for(long long i=1;i<=n;++i){
if(i==1){
last[i]=h[i];
anss[i]=1;
continue;
}
if(h[i]>last[i-1]){
last[i]=h[i];
anss[i]=anss[i-1]+1;
}else{
anss[i]=anss[i-1];
last[i]=last[i-1];
}
}
for(long long i=1;i<=m;++i){
scanf("%lld%lld",&x,&y);
cout<<solve(x,y)<<endl;
}
}
return 0;
}