#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define ll long long int
#define endl '\n'
typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> pbds; // find_by_order, order_of_key
#define all(v) v.begin(), v.end()
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
#define M 1000000007
#define lcm(a, b) a *b / gcd(a, b)
#define memz(a) memset(a, 0, sizeof(a))
#define memn(a) memset(a, -1, sizeof(a))
ll dx[]={1,0,-1,0,1,-1,-1,1};
ll dy[]={0,1,0,-1,1,1,-1,-1};
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ll tst;
cin>>tst;
for(ll test=1;test<=tst;test++)
{
//cout<<"Case "<<test<<": ";
ll n,k;
cin>>n>>k;
bool flag=false;
string s;
cin>>s;
vector<ll>x;
ll c=0;
for(auto u:s)
{
if(u=='1')
{
if(flag==false)
{
c=1;
flag=true;
}
else
{
c++;
}
}
else
{
flag=false;
if(c>0)
{
x.push_back(c);
c=0;
}
}
}
if(c>0)x.push_back(c);
// for(auto u:x)cout<<u<<" ";
// cout<<endl;
k++;
sort(all(x));
ll ans=0;
ll p=x.size()-1;
while(k--)
{
ans+=x[p];
p--;
if(p<0)break;
}
cout<<ans<<endl;
}
}