
#include<bits/stdc++.h>
using namespace std;
 
#define ll long long
#define tej ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
 
#define ve vector<int>
#define vl vector<long long int>
#define vp vector<pair<long long int,long long int>>
#define pb push_back
#define fi first
#define se second
#define pb push_back
#define pf push_front
#define bp pop_back
#define fp pop_front
#define mp make_pair
 
#define fo(i,n) for(i=0;i<n;i++)
#define unq(v)      unique(v.begin(), v.end())-v.begin()
#define fnd(v,a)    find(v.begin(), v.end(), a)
#define uprb(v,a)   upper_bound(v.begin(), v.end(), a)
#define upra(v,n,a) upper_bound(v, v+n, a)
#define lowb(v,a)   lower_bound(v.begin(), v.end(), a)
#define lowa(v,n,a) lower_bound(v, v+n, a)
#define newuv(v)    v.erase(unique(v.begin(),v.end()),v.end())
#define rev(v)      reverse(v.begin(),v.end())
#define rndshf(v)   random_shuffle(v.begin(),v.end())
#define all(v)      v.begin(),v.end()
 
// ll po(ll a,ll b,ll m)
// {
// ll t=1;
// while(b>0)
// {
//     if(b%2!=0)
//     {
//         t=(t*a)%m;
//     }
//     a=(a*a)%m;
//     b=b/2;
// }
// return t;
// }
// ll po(ll a,ll b)
// {
// ll t=1;
// while(b>0)
// {
//     if(b%2!=0)
//     {
//         t=(t*a);
//     }
//     a=(a*a);
//     b=b/2;
// }
// return t;
// }
// ll inv(ll a,ll m)
// {
//   return po(a,m-2,m);
// }
// ll vis[100002]={0},x=0;
// vl v[100002];
// ll dfs(ll s)
// {
//   ll c=1,i;
//   for(i=0;i<v[s].size();i++)
//   {
//     if(vis[v[s][i]]==0)
//     {
//       vis[v[s][i]]=1;
//       c+=dfs(v[s][i]);
//     }
//   }
//   x+=c-1;
//   //cout<<x<<endl;
//   return c;
// }
//map<ll,ll>m;
void solve()
{
   ll n,m,i,x,mi,c=0;
   cin>>n>>m;
   vl v,v1;
   fo(i,m)
   {
    cin>>x;
    v.pb(x);
   }
   if(n==m)
   {
    cout<<0;
    return;
   }
   else if(m==0)
   {
    cout<<1;
    return;
   }
   sort(all(v));
   if(v[0]!=1)
    v1.pb(v[0]-1);
   
   for(i=1;i<m;i++)
   {
    if(v[i]-v[i-1]-1>0)
      v1.pb(v[i]-v[i-1]-1);
   }
    if(v[m-1]!=n)
    v1.pb(n-v[m-1]);

    if(v1.size()==0){
    cout<<"0\n";
    return ;
  }

  sort(all(v1));
  mi=v1[0];
  c=0;
   fo(i,v1.size())
   {
    
    c+=v1[i]/mi;
    if(v1[i]%mi!=0)
      c++;
   }

   cout<<c;
}

int main()
{
    tej
    ll t=1;
   // cin>>t;
    while(t--)
    solve();
return 0;
}

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    int n, m;
    std::cin >> n >> m;
    std::vector<int> a(m);
    for (int mi = 0; mi < m; ++mi) std::cin >> a[mi];

    std::vector<int> lengths;
    std::sort(a.begin(), a.end());
    for (int mi = 0; mi < m; ++mi) {
        int prev = (mi == 0 ? 0 : a[mi - 1]);
        if (a[mi] - prev - 1 > 0) lengths.push_back(a[mi] - prev - 1);
    }
    if (n - (a.size() > 0 ? a.back() : 0) > 0) lengths.push_back(n - (a.size() > 0 ? a.back() : 0));
    if (lengths.empty()) {
        std::cout << 0 << std::endl;
        return 0;
    }
    std::sort(lengths.begin(), lengths.end());
    int k = lengths[0];
    int ans = 0;
    for (int len : lengths) {
        ans += (len + k - 1) / k;
    }
    std::cout << ans << std::endl;
}