首先数组中的元素不能有重复的,否则不可能达到严格递增或严格递减。

我们可以任意重排没有被选择的元素,所以被选中的个元素一定是严格递增或严格递减, 且没有其他数据满足(即其余元素中没有元素在被选择的元素的最大值和最小值之间)

我们可以对离散化处理,这样满足要求的元素一定是连续的()

from bisect import bisect_left

def check1(a, m):
    n = len(a)
    mm = -1 # 严格递增且连续的子数组的最大长度
    l = 0
    for r in range(1, n):
        if a[r] != a[r-1] + 1:
            mm = max(r-l, mm)
            l = r
            
    mm = max(n-l, mm)
    return mm >= m

def check2(a, m):
    n = len(a)
    mm = -1 # 严格递减且连续的子数组的最大长度
    l = 0
    for r in range(1, n):
        if a[r] != a[r-1] - 1:
            mm = max(r-l, mm)
            l = r        
    mm = max(n-l, mm)
    return mm >= m

t = int(input())
for _ in range(t):
    n, m = map(int, input().split())
    a = list(map(int, input().split()))
    if len(set(a)) != n: # 有重复元素
        print('NO')
        continue
        
    if n == 1 or m == 1: # 没有重复元素的情况下,若只有一个元素或者m为1,则一定能满足
        print('YES')
        continue
    
    #对a离散化处理
    na = a[:]
    na.sort()
    for i in range(n):
        a[i] = bisect_left(na, a[i])
    
    if check1(a, m) or check2(a, m):
        print("YES")
    else:
        print("NO")