1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #define N 200010
5 #define lson l,m,rt<<1
6 #define rson m+1,r,rt<<1|1
7
8 int sum[N<<4],tag[N/2];
9 int n,q,cnt;
10
11 void PushUp(int rt)
12 {
13 sum[rt]=sum[rt<<1]+sum[rt<<1|1];
14 }
15
16 void build(int l,int r,int rt)
17 {
18 if(l==r)
19 {
20 if((l>=N-n)&&l<N)
21 sum[rt]=1,tag[++cnt]=l;
22 return;
23 }
24 int m=(l+r)>>1;
25 build(lson);
26 build(rson);
27 PushUp(rt);
28 }
29
30 void update(int i,int c,int l,int r,int rt)
31 {
32 if(l==r)
33 {
34 sum[rt]=c;
35 return;
36 }
37 int m=(l+r)>>1;
38 if(tag[i]<=m)
39 update(i,c,lson);
40 else update(i,c,rson);
41 PushUp(rt);
42 }
43
44 int query(int L,int R,int l,int r,int rt)
45 {
46 if(L<=l&&R>=r)
47 return sum[rt];
48 int m=(l+r)>>1;
49 int res=0;
50 if(L<=m)
51 res+=query(L,R,lson);
52 if(R>m)
53 res+=query(L,R,rson);
54 return res;
55 }
56
57 int main(void)
58 {
59 int T,x;
60 scanf("%d",&T);
61 while(T--)
62 {
63 memset(sum,0,sizeof(sum));
64 memset(tag,0,sizeof(tag));
65 int pre;
66 scanf("%d%d",&n,&q);
67 cnt=0;
68 build(1,N-1,1);
69 pre=tag[1];
70 while(q--)
71 {
72 scanf("%d",&x);
73 int ans=0;
74 if(pre<=tag[x]-1)
75 { update(x,0,1,N-1,1);
76 ans=query(pre,tag[x]-1,1,N-1,1),tag[x]=--pre,update(x,1,1,N-1,1);}
77 printf("%d%c",ans,!q?'\n':' ');
78 }
79 }
80 return 0;
81 }