// Nemes2.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <algorithm>
#include <climits>
#include <vector>
#include <queue>
#include <unordered_set>
#include <cmath>
using namespace std;
using ll = long long;
vector<int> solution;
void DFS(int a, vector<vector<int>>& graph, int cameFrom) {
if (graph[a].size() > 2) return;
for (size_t i = 0; i < graph[a].size(); i++)
{
if (graph[a][i] != cameFrom) {
solution.push_back(graph[a][i]);
DFS(graph[a][i], graph, a);
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, k;
cin >> n >> k;
vector<int> heigths;
vector<ll> heigthsPrefixSum;
ll cur = 0;
heigthsPrefixSum.push_back(0);
for (size_t i = 0; i < n; i++)
{
int a;
cin >> a;
heigths.push_back(a);
heigthsPrefixSum.push_back(cur + a);
cur += a;
}
vector<int> highestInTheMargin;
int max = 0;
for (size_t i = 0; i < k; i++)
{
if (heigths[i] + i > max) {
max = heigths[i] + i;
}
}
highestInTheMargin.push_back(max);
for (size_t i = k; i < n; i++)
{
if (heigths[i - k] == max-1) {
// find new max
int InsMax = 0;
for (size_t j = 1; j < k+1; j++)
{
if (heigths[i-k+j] + j > InsMax) {
InsMax = heigths[i-k+j] + j;
}
}
max = InsMax;
}
else if (heigths[i] + k > max) {
max = heigths[i] + k; //possible timesave here
}
else max--;
highestInTheMargin.push_back(max);
}
ll leastPetak = LLONG_MAX;
ll curLeastPetak = 0;
for (size_t i = 0; i < highestInTheMargin.size(); i++)
{
ll HeightSum = heigthsPrefixSum[i + k] - heigthsPrefixSum[i];
ll HeightNeeded = (2ll * highestInTheMargin[i] - k+1) * k / 2;
curLeastPetak = HeightNeeded - HeightSum;
if (curLeastPetak < leastPetak) {
leastPetak = curLeastPetak;
}
}
cout << leastPetak;
}
// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu
// Tips for Getting Started:
// 1. Use the Solution Explorer window to add/manage files
// 2. Use the Team Explorer window to connect to source control
// 3. Use the Output window to see build output and other messages
// 4. Use the Error List window to view errors
// 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
// 6. In the future, to open this project again, go to File > Open > Project and select the .sln file