#include #include #include #include #define maxm 200000 #define INF 1E7 #define N 1E5 using namespace std; int tree[2][maxm];//tree[u][p] min int n,m,T,a[maxm],b[maxm],c[maxm],mark[2][maxm],ans,p; void updata(int u,int p){ mark[u][p<<1]+=mark[u][p]; mark[u][(p<<1)+1]+=mark[u][p]; tree[u][p<<1]+=mark[u][p]; tree[u][(p<<1)+1]+=mark[u][p]; mark[u][p]=0; } void add(int p,int l,int r,int x,int c,int u){ if(l>x||r>1; add(p<<1,l,mid,x,c,u);add((p<<1)+1,mid+1,r,x,c,u); tree[u][p]=min(tree[u][p<<1],tree[u][(p<<1)+1]); } void find(int p,int l,int r,int c,int u){ if(l==r){ ans++; tree[u][p]=INF; return; } updata(u,p); int mid=(l+r)>>1; if(tree[u][p<<1]y||r>1; insert(p<<1,l,mid,x,y,u);insert((p<<1)+1,mid+1,r,x,y,u); tree[u][p]=min(tree[u][p<<1],tree[u][(p<<1)+1]); } int main(){ scanf("%d",&T); while(T--){ for(int i=1;i<=maxm;i++) tree[0][i]=tree[1][i]=INF; memset(mark,0,sizeof(mark)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d%d",&a[i],&b[i]); } for(int i=1;i<=m;i++){ scanf("%d",&c[i]); } sort(c+1,c+1+m); ans=0; p=1; for(int i=1;i<=n;i++){ find(1,1,N,b[i],1-a[i]); add(1,1,N,i,b[i],a[i]); while(c[p]==i) { insert(1,1,N,1,c[p],0); insert(1,1,N,1,c[p],1); p++; } } printf("%d\n",n-ans); } }