#include<bits/stdc++.h>
using namespace std;
#define ALL(x) x.begin(),x.end()
#define rep(i,n) for(int i=0;i<(n);i++)
#define debug(v) cout<<#v<<":";for(auto x:v){cout<<x<<' ';}cout<<endl;
#define mod 1000000007
using ll=long long;
const int INF=1000000000;
const ll LINF=1001002003004005006ll;
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
template<class T>bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;}
template<class T>bool chmin(T &a,const T &b){if(b<a){a=b;return true;}return false;}
 
struct IOSetup{
    IOSetup(){
        cin.tie(0);
        ios::sync_with_stdio(0);
        cout<<fixed<<setprecision(12);
    }
} iosetup;
 
template<typename T1,typename T2>
ostream &operator<<(ostream &os,const pair<T1,T2>&p){
    os<<p.first<<" "<<p.second;
    return os;
}
 
template<typename T>
ostream &operator<<(ostream &os,const vector<T>&v){
    for(int i=0;i<(int)v.size();i++) os<<v[i]<<(i+1==(int)v.size()?"":" ");
    return os;
}

template<typename T1,typename T2>
istream &operator>>(istream &is,pair<T1,T2>&p){
    is>>p.first>>p.second;
    return is;
}

template<typename T>
istream &operator>>(istream &is,vector<T>&v){
    for(T &x:v)is>>x;
    return is;
}

int n,m;

void solve(){
    vector<ll> s(n);
    cin>>s;

    // tの時，いけるか，
    auto f=[&](ll x){
        // cout<<x<<" ikuyo"<<endl;
        ll c=0;
        ll lv=1;

        // 少なくとも1匹目は殺せるような範囲で二分法してるので
        // このwhileはいずれ止まるはず
        while(!(s.back()<lv+x)){
            // cout<<c<<" : "<<lv<<endl;
            // min(|lv-si|) , si<lv+xとなるようなsiを倒し，lv up
            auto right=lower_bound(ALL(s),lv+x)-begin(s);
            // [0,right)まで倒せる

            auto ite=lower_bound(begin(s),begin(s)+right,lv);
            ll t=LINF;
            if(ite!=begin(s)+right)chmin(t,abs(lv-*ite));
            if(ite!=begin(s)) chmin(t,abs(lv-*prev(ite)));
            lv+=max(1ll,x-t);
            c++;
        }
        // ここで最後の敵を倒す
        c++;
        return c>=m;
    };

    ll lw=s[0],hi=INF,res=-1;
    while(lw<=hi){
        ll mid=(lw+hi)/2;
        if(f(mid)){
            res=mid;
            lw=mid+1;
        }else{
            hi=mid-1;
        }
    }
    cout<<res<<endl;
}

signed main(){
    while(cin>>n>>m,n) solve();
    return 0;
}

