#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <typename T> using o_set = tree<T, null_type, std::less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define int long long
#define endl '\n'
#define F first
#define S second
#define pii pair<int, int>
#define sz(x) (int) x.size()
using namespace std;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;
const int INF = 1e15 + 10;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
class SGTree {
public:
struct Node {
int sm = 0, mx = -INF, mn = INF;
};
vector<Node> seg;
SGTree(int n) {
seg.resize(4 * n + 1);
}
void pull(int ind) {
seg[ind].sm = (seg[2 * ind + 1].sm + seg[2 * ind + 2].sm);
seg[ind].mx = max(seg[2 * ind + 1].mx, seg[2 * ind + 2].mx);
seg[ind].mn = min(seg[2 * ind + 1].mn, seg[2 * ind + 2].mn);
}
Node merge(Node a, Node b) {
Node c;
c.sm = a.sm + b.sm;
c.mx = max(a.mx, b.mx);
c.mn = min(a.mn, b.mn);
return c;
}
void build(int ind, int low, int high, vector<int> &a) {
if(low == high) {
seg[ind].sm = seg[ind].mx = seg[ind].mn = a[low];
return;
}
int mid = low + (high - low) / 2;
build(2 * ind + 1, low, mid, a);
build(2 * ind + 2, mid + 1, high, a);
pull(ind);
}
Node query(int ind, int low, int high, int l, int r) {
if(l > high || r < low) return Node();
if(l <= low && r >= high) return seg[ind];
int mid = low + (high - low) / 2;
auto left = query(2 * ind + 1, low, mid, l, r);
auto right = query(2 * ind + 2, mid + 1, high, l, r);
return merge(left, right);
}
void update(int ind, int low, int high, int i, int val) {
if(low == high) {
seg[ind].sm = seg[ind].mx = seg[ind].mn = val;
return;
}
int mid = low + (high - low) / 2;
if(i <= mid) update(2 * ind + 1, low, mid, i, val);
else update(2 * ind + 2, mid + 1, high, i, val);
pull(ind);
}
};
void solve() {
int n, k; cin>>n>>k;
vector<int> v(n);
for(int i = 0; i < n; i++) cin>>v[i];
SGTree st(n);
st.build(0, 0, n - 1, v);
// for(int i = 0; i < n; i++) cerr<<st.query(0, 0, n - 1, i, i).sm<<" "; cerr<<endl;
int ans = INF;
for(int i = 0; i + k - 1 < n; i++) {
auto res = st.query(0, 0, n - 1, i, i + k - 1), l = st.query(0, 0, n - 1, 0, i - 1), r = st.query(0, 0, n - 1, i + k, n - 1);
int cur = res.sm;
ans = min(ans, cur);
ans = min(ans, cur - res.mx + min(l.mn, r.mn));
}
cout<<ans<<endl;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t = 1, c = 1; cin>>t;
while(t--) {
// cerr<<"Case "<<c++<<": \n";
solve();
}
}