#include <bits/stdc++.h>
using namespace std;

#define all(x) x.begin(), x.end()
#define rep(i, n) for (int i = 0; i < (n); i++)
#define forn(i, a, b) for(int i = (a); i <= (b); i++)
#define revforn(i, a, b) for(int i = (a); i >= (b); i--)
#define trav(a, x) for(auto& a : x)
typedef pair<int, int> pi;
typedef pair<int64_t, int64_t> pl;
typedef vector<int> vi;
typedef vector<int64_t> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<vector<int>> vvi;
typedef vector<vector<int64_t>> vvl;

template <typename A, typename B>
string to_string(pair<A, B> p);

template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p);

template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p);

string to_string(const string& s) {
	return '"' + s + '"';
}

string to_string(const char* s) {
	return to_string((string) s);
}

string to_string(const char& c) {
	return (string)"" + c;
}

string to_string(bool b) {
	return (b ? "true" : "false");
}

string to_string(vector<bool> v) {
	bool first = true; string res = "{";
	for (int i = 0; i < static_cast<int>(v.size()); i++) {
		if (!first) {
			res += ", ";
		}
		first = false; res += to_string(v[i]);
	}
	res += "}"; return res;
}

template <size_t N>
string to_string(bitset<N> v) {
	string res = "";
	for (size_t i = 0; i < N; i++) {
		res += static_cast<char>('0' + v[i]);
	}
	return res;
}

template <typename A>
string to_string(A v) {
	bool first = true; string res = "{";
	for (const auto& x : v) {
		if (!first) {
			res += ", ";
		}
		first = false; res += to_string(x);
	}
	res += "}"; return res;
}

template <typename A, typename B>
string to_string(pair<A, B> p) {
	return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p) {
	return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ")";
}

template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p) {
	return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";
}

void debug_out() {
	cerr << endl;
}

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
	cerr << " " << to_string(H);
	debug_out(T...);
}

#ifdef LOCAL
	#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
	#define debug(...) 42
#endif

int32_t main() {
	std::ios::sync_with_stdio(false); std::cin.tie(nullptr);
	int T;
	cin >> T;
	while (T--) {
		int n, m; cin >> n >> m;
		string s; cin >> s;
		vi a(n);
		rep(i, n) {
			a[i] = s[i] - '0';
		}
		vi pref(n), suf(n);
		pref[0] = int(1.01e9);
		if (a[0] == 1) {
			pref[0] = 0;
		}
		forn(i, 1, n - 1) {
			if (a[i] == 1) {
				pref[i] = 0;
			} else if (pref[i - 1] != 0 || a[i - 1] == 1) {
				pref[i] = pref[i - 1] + 1;
			}
		}
		suf[n - 1] = int(1.01e9);
		if (a[n - 1] == 1) {
			suf[n - 1] = 0;
		}
		revforn(i, n - 2, 0) {
			if (a[i] == 1) {
				suf[i] = 0;
			} else if (suf[i + 1] != 0 || a[i + 1] == 1) {
				suf[i] = suf[i + 1] + 1;
			}
		}
		debug(pref, suf);
		rep(i, n) {
			if (pref[i] != suf[i] && min(pref[i], suf[i]) <= m) {
				a[i] = 1;
			}
		}
		rep(i, n) {
			cout << a[i];
		}
		cout << '\n';
	}
	return 0;
}