#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main() {
ll n, k;
cin >> n >> k;
vector<ll> b(n);
vector<unordered_map<ll, ll>> g(k); // Stores frequency per group
// Read input and store frequency in groups
for (ll i = 0; i < n; i++) {
cin >> b[i];
g[i % k][b[i]]++;
}
// DP table: dp[i][goal_xor] -> Min cost to achieve `goal_xor` after `i` groups
vector<vector<ll>> dp(k + 1, vector<ll>(64, LLONG_MAX));
// Base case: When all `k` groups are processed, `goal_xor == 0` must have cost `0`
dp[k][0] = 0;
// Iterate over groups in reverse order
for (ll i = k - 1; i >= 0; i--) {
for (ll goal_xor = 0; goal_xor < 64; goal_xor++) {
ll total =1+ (n - i - 1) / k; // Total elements in this group
for (ll last_element = 0; last_element < 64; last_element++) {
if (dp[i + 1][goal_xor ^ last_element] == LLONG_MAX) continue; // Skip invalid states
// Compute the number of changes required
ll freq = g[i].count(last_element) ? g[i][last_element] : 0;
ll change_cost = total - freq;
// Transition to the next DP state
dp[i][goal_xor] = min(dp[i][goal_xor], dp[i + 1][goal_xor ^ last_element] + change_cost);
}
}
}
// Output the minimum number of replacements needed to get XOR = 0
cout << dp[0][0] << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKCmludCBtYWluKCkgewogICAgbGwgbiwgazsKICAgIGNpbiA+PiBuID4+IGs7CgogICAgdmVjdG9yPGxsPiBiKG4pOwogICAgdmVjdG9yPHVub3JkZXJlZF9tYXA8bGwsIGxsPj4gZyhrKTsgLy8gU3RvcmVzIGZyZXF1ZW5jeSBwZXIgZ3JvdXAKCiAgICAvLyBSZWFkIGlucHV0IGFuZCBzdG9yZSBmcmVxdWVuY3kgaW4gZ3JvdXBzCiAgICBmb3IgKGxsIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgY2luID4+IGJbaV07CiAgICAgICAgZ1tpICUga11bYltpXV0rKzsKICAgIH0KCiAgICAvLyBEUCB0YWJsZTogZHBbaV1bZ29hbF94b3JdIC0+IE1pbiBjb3N0IHRvIGFjaGlldmUgYGdvYWxfeG9yYCBhZnRlciBgaWAgZ3JvdXBzCiAgICB2ZWN0b3I8dmVjdG9yPGxsPj4gZHAoayArIDEsIHZlY3RvcjxsbD4oNjQsIExMT05HX01BWCkpOwoKICAgIC8vIEJhc2UgY2FzZTogV2hlbiBhbGwgYGtgIGdyb3VwcyBhcmUgcHJvY2Vzc2VkLCBgZ29hbF94b3IgPT0gMGAgbXVzdCBoYXZlIGNvc3QgYDBgCiAgICBkcFtrXVswXSA9IDA7CgogICAgLy8gSXRlcmF0ZSBvdmVyIGdyb3VwcyBpbiByZXZlcnNlIG9yZGVyCiAgICBmb3IgKGxsIGkgPSBrIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBmb3IgKGxsIGdvYWxfeG9yID0gMDsgZ29hbF94b3IgPCA2NDsgZ29hbF94b3IrKykgewogICAgICAgICAgICBsbCB0b3RhbCA9MSsgKG4gLSBpIC0gMSkgLyBrOyAvLyBUb3RhbCBlbGVtZW50cyBpbiB0aGlzIGdyb3VwCgogICAgICAgICAgICBmb3IgKGxsIGxhc3RfZWxlbWVudCA9IDA7IGxhc3RfZWxlbWVudCA8IDY0OyBsYXN0X2VsZW1lbnQrKykgewogICAgICAgICAgICAgICAgaWYgKGRwW2kgKyAxXVtnb2FsX3hvciBeIGxhc3RfZWxlbWVudF0gPT0gTExPTkdfTUFYKSBjb250aW51ZTsgLy8gU2tpcCBpbnZhbGlkIHN0YXRlcwoKICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG51bWJlciBvZiBjaGFuZ2VzIHJlcXVpcmVkCiAgICAgICAgICAgICAgICBsbCBmcmVxID0gZ1tpXS5jb3VudChsYXN0X2VsZW1lbnQpID8gZ1tpXVtsYXN0X2VsZW1lbnRdIDogMDsKICAgICAgICAgICAgICAgIGxsIGNoYW5nZV9jb3N0ID0gdG90YWwgLSBmcmVxOwoKICAgICAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgRFAgc3RhdGUKICAgICAgICAgICAgICAgIGRwW2ldW2dvYWxfeG9yXSA9IG1pbihkcFtpXVtnb2FsX3hvcl0sIGRwW2kgKyAxXVtnb2FsX3hvciBeIGxhc3RfZWxlbWVudF0gKyBjaGFuZ2VfY29zdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gT3V0cHV0IHRoZSBtaW5pbXVtIG51bWJlciBvZiByZXBsYWNlbWVudHMgbmVlZGVkIHRvIGdldCBYT1IgPSAwCiAgICBjb3V0IDw8IGRwWzBdWzBdIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0=