#include #include #include #include #include #include #define M 100005 #define oo 20000000000000LL using namespace std; int tree1[M],tree2[M],A[M]; int n,m; int lowbit(int x){ return x&(-x); } void update(int x,int y,int *tree){ while(x<=n){ tree[x]+=y; x+=lowbit(x); } } int query(int x,int *tree){ int res=0; while(x>0){ res+=tree[x]; x-=lowbit(x); } return res; } int main(){ int T; scanf("%d",&T); while(T--){ memset(tree1,0,sizeof(tree1)); memset(tree2,0,sizeof(tree2)); scanf("%d%d",&n,&m); int j; for(j=1;j<=n;j++) scanf("%d",&A[j]); long long ans=0,cnt=0; for(j=n;j>m;j--){ ans+=query(A[j]-1,tree2); update(A[j],1,tree2); } cnt=ans; for(j=m+1;j<=n;j++){ cnt-=query(A[j]-1,tree2); update(A[j],-1,tree2); cnt-=query(n,tree1)-query(A[j],tree1); update(A[j-m],1,tree1); cnt+=query(n,tree1)-query(A[j-m],tree1); cnt+=query(A[j-m]-1,tree2); ans=min(ans,cnt); } cout<