#ifndef COMMON_H
#define COMMON_H 1
#include <algorithm>
#include <cassert>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include <random>
using namespace std;
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define szx(x) (int)(x).size()
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;
constexpr int LOG2(int x)
{
return 32 - __builtin_clz(x) - 1;
}
#endif // COMMON_H
#ifndef DEBUG_H
#define DEBUG_H 1
#ifndef CLown1331
#define debug(...) 0
#define ASSERT(...) 0
#define dbg(...) 0
#endif
#endif // DEBUG_H
#ifndef solution_h
#define solution_h 1
namespace solution
{
const int sz = 2e5 + 105;
const int mod = 1e9 + 7;
const ll INF = 1e16;
void solve()
{
int t;
int n, k;
cin >> t;
assert(t >= 1 && t <= 10000);
while (t--)
{
cin >> n >> k;
assert(n >= 1 && n <= 100000);
assert(k >= 1 && k <= n);
vector<int> a(n);
for (int i = 0; i < n; i++)
{
cin >> a[i];
assert(a[i] >= -100000 && a[i] <= 100000);
}
auto f = [&]() -> ll {
multiset<int> sm, ot;
ll sum = 0;
ll ans = 1e16;
for (int i = 0; i < n; i++)
{
sum += a[i];
sm.insert(a[i]);
if (i >= k)
{
sum -= a[i - k];
sm.erase(sm.find(a[i - k]));
ot.insert(a[i - k]);
ans = min(ans, sum);
}
if (ot.size() > 0)
{
ans = min(ans, sum + *ot.begin() - *sm.rbegin());
}
}
ans = min(ans, sum);
return ans;
};
ll ans = 1e16;
ans = f();
reverse(a.begin(), a.end());
ans = min(ans, f());
cout << ans << endl;
}
}
} // namespace solution
#endif // solution_h
#define _CRT_SECURE_NO_WARNINGS
int main()
{
solution::solve();
return 0;
}