//如果mid 可以满足 那么mid+1也是可以满足,这样就可以二分答案、
//这样就可以二分答案、注意二分的最大值要超过 2*10^9
// 然后就可以dp判断这个mid 是否满足
// dp[i] , 表示 计算到 a[i] , a[i] 不变时需要最少的修改次数才可以满足 相邻差 mid
// 转移方程 dp[i] = min(dp[i],dp[j]+(i-j-1)) ; j < i && a[i]-a[j] <= (i-j)*mid ;
// 意思:如果a[i]-a[j] 满足 (i-j)*mid 那么 通过改变所有 j+1~i-1的数是可以满足条件的
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <algorithm>
#define maxn 2002
#define INF 2000000001
#define LL long long
using namespace std;
int n , k ;
LL a[maxn] ;
int dp[maxn] ;
int abs1( int a ){ return a >= 0 ? a : -a ;}
int min1( int a , int b ){ return a > b ? b : a ;}
bool find( LL mid )
{
int i , j , u ;
for( i = 1 ; i <= n+1 ; i++)
dp[i] = i-1 ;
dp[1] = 0 ;
for( i = 2 ; i <= n ;i++ )
for( j = 1 ; j < i ;j++ )if(abs1(a[i]-a[j]) <= (i-j)*mid)
dp[i] = min1(dp[i],dp[j]+(i-j-1)) ;
for( i = 1 ; i <= n ;i++)
dp[n+1] = min1(dp[n+1],n-i+dp[i]) ;
if(dp[n+1] <= k)return true ;
return false ;
}
int main()
{
int i ;
LL mid , L , R ;
//freopen("in.txt","r",stdin) ;
while( scanf("%d%d" ,&n , &k ) != EOF )
{
for( i = 1 ; i <= n ;i++)
scanf("%I64d" , &a[i]) ;
L = 0 ; R = INF ; // 二分答案
while( L <= R )
{
mid = (L+R)>>1 ;
if(find(mid))R = mid-1 ;
else L = mid+1 ;
}
printf("%d\n",R+1) ;
}
return 0 ;
}