用的堆
#include<bits/stdc++.h>
using namespace std;
const int N=5*1e5+5;
struct node{
int sum,x;
};
bool operator < (const node& a,const node& b)
{
if(a.sum==b.sum) return a.x>b.x;
return a.sum<b.sum;
}
priority_queue <node ,vector<node> > q;
int k;
int n;
int a[N];
long long ans=0;
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
node s;
s.sum=a[i];
s.x=i;
q.push(s);
}
while(true)
{
if(q.size()<k) break;
// cout<<w.x<<" "<<w.sum<<endl;
// cout<<e.x<<" "<<e.sum<<endl;
// cout<<y.x<<" "<<y.sum<<endl;
node b[N];
for(int i=1;i<=k;i++)
{
b[i].x=q.top().x;
b[i].sum=q.top().sum-1;
q.pop();
}
ans++;
for(int i=1;i<=k;i++)
{
if(b[i].sum!=0)q.push(b[i]);
}
}
printf("%lld\n",ans);
return 0;
}