#ifndef LOCAL
#include <bits/stdc++.h>
#define debug(...)
#endif
using namespace std;
#define int long long
#define sz(v) (int)(v).size()
#define cinv(v) for (auto &it:v) cin>>it;
#define coutv(v) for (auto &it:v) cout<< it<<' '; cout<<'\n';
template<typename T, T (*op)(T, T), T (*op2)(T, T)> struct SparseTable {
vector<vector<T> > t, t2;
SparseTable(const vector<T> &v): t(1, v), t2(1, v) {
int K = __lg(sz(v)), N = sz(v);
for (int i = 1; i <= K; ++i) {
t.emplace_back(sz(v) - (1 << i) + 1);
t2.emplace_back(sz(v) - (1 << i) + 1);
for (int j = 0; j + (1 << i) <= N; ++j) {
t[i][j] = op(t[i - 1][j], t[i - 1][j + (1 << (i - 1))]);
t2[i][j] = op2(t2[i - 1][j], t2[i - 1][j + (1 << (i - 1))]);
}
}
}
T query(int L, int R, bool f) {
assert(L<=R);
int i = __lg(R - L + 1);
return f ? op(t[i][L], t[i][R - (1 << i) + 1]) : op2(t2[i][L], t2[i][R - (1 << i) + 1]);
}
};
int op(int a, int b) { return min(a, b); }
int op2(int a, int b) { return max(a, b); }
const int INF = 1e12;
void shelby() {
int n, k;
cin >> n >> k;
vector<int> v(n + 1);
for (int i = 1; i <= n; ++i) cin >> v[i];
SparseTable<int, op, op2> table(v);
int ans = INF, now = 0;
for (int i = 1; i <= k; ++i) now += v[i];
ans = min(ans, now);
ans = min(ans, now + (k + 1 > n ? INF : table.query(k + 1, n, true)) - table.query(1, k, false));
debug(ans);
for (int i = k + 1; i <= n; ++i) {
now -= v[i - k] - v[i];
debug(now, i);
ans = min(ans, now);
ans = min(ans, now + min(table.query(1, i - k, true), (i == n ? INF : table.query(i + 1, n, true))) - table.query(i - k + 1, i, false));
}
cout << ans << '\n';
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
int t = 1;
cin >> t;
for (int _ = 1; _ <= t; ++_) {
// cout << "Case " << _ << ": ";
shelby();
}
}