#include <bits/stdc++.h>
#include <cmath>
#include <bitset>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
#define ll long long int
#define lld long double
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define gcd(a, b) __gcd(a, b)
#define lcm(a, b) ((a * b) / gcd(a, b))
#define pi acos(-1.00)
ll rec(vector<vector<ll>>&a,vector<ll>&v,ll in,ll jn,ll n,ll m){
if(in==n-1&& a[in][jn]==2){
return jn;
}
if(a[in][jn]==1){
a[in][jn]=2;
ll x=rec(a,v,in,jn+1,n,m);
return x;
}
if(a[in][jn]==3){
a[in][jn]=2;
ll x=rec(a,v,in,jn-1,n,m);
return x;
}
return rec(a,v,in+1,jn,n,m);
}
void evan(int t)
{
ll n;cin>>n;
ll k;cin>>k;
string s;
cin>>s;
vector<ll>v;
ll cnt=0;
for(int i=0;i<n;i++){
if(s[i]=='1'){
cnt++;
}
else{
if(cnt!=0)v.push_back(cnt);
cnt=0;
}
}
if(cnt!=0)v.push_back(cnt);
ll maxx=-1;
deque<ll>q;
ll temp=0;
n=v.size();
for(int i=0;i<=min(k,n-1);i++){
q.push_back(v[i]);
temp+=v[i];
}
if(k+1>=n){
cout<<temp<<"\n";return;
}
maxx=temp;
for(int i=q.size();i<n;i++){
temp-=q.front();
q.pop_front();
q.push_back(v[i]);
temp+=v[i];
maxx=max(temp,maxx);
}
cout<<maxx<<"\n";
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(nullptr);
int t = 1;
cin >> t;
for (int i = 1; i <= t; i++)
{
evan(i);
}
}