#include <bits/stdc++.h>
using namespace std;
#define fast_io ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define cout_precision cout.setf(ios::fixed); cout.precision(32);
#define clr(a) memset(a,0,sizeof(a))
#define umap unordered_map
#define uset unordered_set
#define fr first
#define sc second
#define pb push_back
#define pf push_front
#define M int(1e9+7)
#define endl '\n'
#define largest(a,b,c) (a>b?(a>c? a:c):(b>c? b:c))
#define smallest(a,b,c) (a<b?(a<c? a:c):(b<c? b:c))
using ll = int64_t; using vll = vector<ll>; using vvll = vector<vll>;
using pll = pair<ll, ll>; using vpll = vector<pll>; using vvpll = vector<vpll>;
ll power(ll a, ll n){
if(n == 0) return 1;
if(n == 1) return a%M;
if(n&1){
return a*power(a,n-1);
}
ll res = power(a,n/2);
return (res*res)%M;
}
int main() {
fast_io; cout_precision;
int t; cin >> t;
while(t--){
ll n,k; cin >> n >> k;
vector <ll> arr(n);
for(int i=0; i<n; i++){
cin >> arr[i];
}
vector <ll> pref(n);
pref[0] = arr[0];
for(int i=1; i<n; i++){
pref[i] = pref[i-1] + arr[i];
}
ll res = 0;
ll currMedian = arr[0] ;
ll currAvg = pref[k-1]/k;
multiset <ll , greater <ll> > maxHeap;
multiset < ll> minHeap;
maxHeap.insert(arr[0]);
for(int i=1; i<k; i++){
if(maxHeap.size() > minHeap.size()){
if(arr[i] < currMedian){
minHeap.insert(*(maxHeap.begin()));
maxHeap.erase(maxHeap.find(*maxHeap.begin()));
maxHeap.insert(arr[i]);
}
else{
minHeap.insert(arr[i]);
}
currMedian = *maxHeap.begin();
}
else if(maxHeap.size() < minHeap.size()){
if(arr[i] > currMedian){
maxHeap.insert(*minHeap.begin());
minHeap.erase(minHeap.find(*(minHeap.begin())));
minHeap.insert(arr[i]);
}
else{
maxHeap.insert(arr[i]);
}
currMedian = *maxHeap.begin();
}
else{
if(arr[i] < currMedian){
maxHeap.insert(arr[i]);
currMedian = *maxHeap.begin();
}
else{
minHeap.insert(arr[i]);
currMedian = *minHeap.begin();
}
}
}
if(currAvg >= currMedian) res++;
for(int i=k; i<n; i++){
if(maxHeap.find(arr[i-k]) != maxHeap.end()){
maxHeap.erase(maxHeap.find(arr[i-k]));
}
else{
minHeap.erase(minHeap.find(arr[i-k]));
}
if(maxHeap.size() > minHeap.size()){
if(arr[i] < currMedian){
minHeap.insert(*(maxHeap.begin()));
maxHeap.erase(maxHeap.find(*maxHeap.begin()));
maxHeap.insert(arr[i]);
}
else{
minHeap.insert(arr[i]);
}
currMedian = *maxHeap.begin();
}
else if(maxHeap.size() < minHeap.size()){
if(arr[i] > currMedian){
maxHeap.insert(*minHeap.begin());
minHeap.erase(minHeap.find(*(minHeap.begin())));
minHeap.insert(arr[i]);
}
else{
maxHeap.insert(arr[i]);
}
currMedian = *maxHeap.begin();
}
else{
if(arr[i] < currMedian){
maxHeap.insert(arr[i]);
currMedian = *maxHeap.begin();
}
else{
minHeap.insert(arr[i]);
currMedian = *minHeap.begin();
}
}
currAvg = (pref[i] - pref[i-k])/k;
if(currAvg >= currMedian){
res++;
}
}
cout << res <<endl;
}
return 0;
}