#include #include #include #include #include #include #include #include #include using namespace std; bool check(int index1,int index2,int k) { int sub = abs(index1 - index2); if(sub % k == 0) return true; else return false; } int main() { int n,k; cin >> n >> k; vector a(n); for(auto&& x : a) { cin >> x; } vector sorted_a = a; sort(sorted_a.begin(),sorted_a.end()); if(k > n) { if(sorted_a == a) { cout << 0 << endl; return 0; } else { cout << -1 << endl; return 0; } } int count = 0; int i = 0; for(int i =0; i < n; ++i) { auto iter1 = find(a.begin(), a.end(),a.at(i)); int index1 = distance(a.begin(), iter1); auto iter2 = find(sorted_a.begin(), sorted_a.end(),a.at(i)); int index2 = distance(sorted_a.begin(), iter2); if(!check(index1,index2,k)) { cout << -1 << endl; return 0; } } while(a != sorted_a) { if(sorted_a.at(i) != a.at(i)) { if(i+k < n) { swap(a.at(i),a.at(i+k)); ++count; } } ++i; if(i == n) i = 0; } cout << count << endl; }