#include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N, W; cin >> N >> W; vector A(N); for(int i = 0; i < N; i++) cin >> A[i]; vector sorted = A; sort(sorted.begin(), sorted.end()); vector pos(N); for(int i = 0; i < N; i++) pos[i] = i; vector used(N, false); int ans = 0; for(int start = 0; start < N; start++){ if(used[start]) continue; // build component vector comp; for(int i = start; i < N; i += W){ comp.push_back(i); used[i] = true; } // values in component vector cur, need; for(int i : comp){ cur.push_back(A[i]); need.push_back(sorted[i]); } sort(cur.begin(), cur.end()); sort(need.begin(), need.end()); if(cur != need){ cout << -1 << '\n'; return 0; } // mapping value -> index unordered_map mp; for(int i = 0; i < (int)comp.size(); i++){ mp[A[comp[i]]] = i; } vector vis(comp.size(), false); for(int i = 0; i < (int)comp.size(); i++){ if(vis[i]) continue; int len = 0, curi = i; while(!vis[curi]){ vis[curi] = true; curi = mp[ sorted[ comp[curi] ] ]; len++; } ans += max(0, len - 1); } } cout << ans << '\n'; }