感觉写的挺对的(
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
ll a[100005];
ll b[100005];
ll bit[100005];
ll n,k;
ll get(ll val){
return *lower_bound(b + 1, b + 1 + n, val);
}
ll lowbit(ll x){
return x & (-x);
}
void add(ll x, ll k){
for(ll i = x; i <= n; i += lowbit(i)) bit[i] += k;
}
ll query(ll x){
ll ans = 0;
for(ll i = x; i; i -= lowbit(i)) ans += bit[i];
return ans;
}
ll q[100005];//存一下下修改过的点
ll cnt = 0;
void init(){
while(cnt){
ll cur = q[cnt];
cnt--;
add(cur, -1);
}
}
bool check(ll m){
ll l = 1, r = 1;
ll sum = 0, num = 1;
while(r <= n){
ll index = get(a[r]);
add(index, 1);
q[++cnt] = index;
ll cur = (r - l + 1) - query(index);
if(sum + cur > m){
num++;
if(num > k) break;
sum = 0;
l = r;
init();
}else{
sum += cur;
r++;
}
}
init();
if(num <= k) return 1;
else return 0;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
ll T;
cin>>T;
while(T--){
cin>>n>>k;
for(ll i = 1; i <= n; i++){
cin>>a[i];
b[i] = a[i];
}
sort(b + 1, b + 1 + n);
ll l = 0, r = 1ll*n*(n-1)/2;
while(l <= r){
ll mid = l + (r-l)/2;
if(check(mid)){
r = mid - 1;
}else{
l = mid + 1;
}
}
cout<<l<<endl;
}
return 0;
}