public int kIncreasing(int[] arr, int k) {
    int ans = 0;
    int n = arr.length;
    for (int i = 0; i < k; i++) {
        int maxLen = 0;
        List<Integer> list = new ArrayList<>();
        for (int j = i; j < n; j+=k) {
            if (list.isEmpty() || arr[j] >= list.get(list.size() -1)) {
                list.add(arr[j]);
                maxLen = Math.max(list.size(), maxLen);
            }else{
                int index = binarySearch(list, arr[j]);
                list.set(index, arr[j]);
                maxLen = Math.max(maxLen, index + 1);
            }
        }
        int dif = ((n - i -1) / k + 1) - maxLen;
        ans += dif;
    }
    return ans;
}


public int binarySearch(List<Integer> list, int target) {
    int l = 0;
    int r = list.size() -1;

    while (l < r) {
        int mid = l + (r - l) / 2;
        if (list.get(mid) <= target) {
            l = mid + 1;
        }else{
            r = mid;
        }
    }
    return l;
}