#include <bits/stdc++.h>
using namespace std;
#define int long long
#define REP(i, n) FOR(i, 0, n)
#define FOR(i, s, n) for (int i = (s), i##_len = (n); i < i##_len; ++i)
#define ALL(obj) (obj).begin(), (obj).end()
#define ALLR(obj) (obj).rbegin(), (obj).rend()
#define CEIL(a, b) ((a - 1) / b + 1)

void solve() {
    int N, M;
    cin >> N >> M;
    vector<int> A(M);
    for (auto &x : A) {
        cin >> x;
    }
    sort(ALL(A));
    vector<int> df;
    // 左右の幅の最小値
    int minv = 1e9, before = 0;
    for (auto &x : A) {
        if (x - before - 1 >= 1) {
            minv = min(minv, x - before - 1);
            df.emplace_back(x - before - 1);
        }
        before = x;
    }
    if (before != N) {
        minv = min(minv, N - before);
        df.emplace_back(N - before);
    }
    int sum = 0;
    for (auto x : df) {
        sum += CEIL(x, minv);
    }
    cout << sum << endl;
}

signed main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    solve();
}

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define pii pair<int,int>
#define fi first
#define se second
#define int long long
#define pb push_back
#define mod 998244353
#define pll pair<long long,long long>
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
long long power(long long a,long long b){
    long long ans=1;
    while(b>0){
        if(b&1){ans=(ans*a)%mod;}
                a=(a*a)%mod;
                b>>=1;
        }
    return ans;
        
}
int fact[1000005],fact_inv[1000005];
void pre(){
    fact[0]=1;
    fact_inv[0]=1;
    for(int i=1;i<200005;i++){
        fact[i]=fact[i-1]*i;
        fact[i]%=mod;
        fact_inv[i]=power(fact[i],mod-2);
    }
}
long long ncr(long long n,long long r){
    if(n<r){return 0;}
    if(n==r||r==0){return 1;}
    return (((fact[n]*fact_inv[n-r])%mod)*fact_inv[r])%mod;
    //return x; 
}
//find_by_order() ->  iterator to the k-th largest element (counting from zero)
//order_of_key() ->    the number  items in a set that are strictly smaller than our item aka index in set
//upper bound : strictly greater than x
//lower bound : greater equal to x
int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n,m;
    cin>>n>>m;
    if(m==0){
        cout<<1;
        return 0;
    }
    int a[m];
    for(int i=0;i<m;i++){
        cin>>a[i];
    }
    sort(a,a+m);
    vector<int>v;
    if(a[0]!=1)v.pb(a[0]-1);
    if(a[m-1]!=n)v.pb(n-a[m-1]);
    for(int i=1;i<m;i++){
        if(a[i]==a[i-1]+1)continue;
        v.pb(a[i]-a[i-1]-1);
    }
    if(v.empty()){
        cout<<0;
        return 0;
    }
    sort(v.begin(),v.end());
    int ans=0;
    for(int i=0;i<v.size();i++){
        if(v[i]%v[0]==0)ans+=v[i]/v[0];
        else ans+=(v[i]/v[0])+1;
    }
    cout<<ans;
    return 0;
}