// 若存在,则在原数组与排好序的数组中必存在一段是相同的,段长>=m,
// 可以用map或者二分快速定位到排好序的数组中,与原数组起点相同的位置,然后走一下这一段相同的有多长。
// 注意判断是否存在相同的数(严格单调),注意递增、递减排序都要判断一遍,递减不要用lower_bound
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+6;
int T;
int num1[N],num2[N],num3[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
unordered_set<int> unst;
bool sign=true;
for(int i=0;i<n;i++){
cin>>num1[i];
num2[i]=num1[i];
num3[i]=num1[i];
if(unst.count(num1[i])) sign=false;
unst.insert(num1[i]);
}
if(!sign){
cout<<"NO"<<endl;
continue;
}
sort(num2,num2+n);
sign=false;
for(int i=0;i<n;i++){
int idx=lower_bound(num2,num2+n,num1[i])-num2;
int j=i;
while(j<n && idx<n && num1[j]==num2[idx]){
j++;
idx++;
}
// cout<<i<<" "<<j<<endl;
if(j-i>=m){
sign=true;
break;
}
i=j-1;
}
reverse(num2,num2+n);
sort(num3,num3+n);
for(int i=0;i<n;i++){
int idx=lower_bound(num3,num3+n,num1[i])-num3;
int j=i;
idx=n-idx-1;
while(j<n && idx<n && num1[j]==num2[idx]){
j++;
idx++;
}
// cout<<i<<" "<<j<<endl;
if(j-i>=m){
sign=true;
break;
}
i=j-1;
}
if(sign) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}