#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fon(i,n) for(int i=0;i<n;i++)
#define fo(i,n) for(int i=1;i<=n;i++)
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define pii pair<int,int>
#define pll pair<ll ,ll>
#define vii vector<int>
#define vll vector<ll>
#define vvll vector<vll>
#define vpii vector<pii>
#define vpll vector<pll>
#define bs binary_search
#define lb lower_bound
#define ub upper_bound
#define M (1000*1000*1000+7)
#define test ll T; cin>>T; while(T--)
#define all(z) z.begin() , z.end()
#define allr(z) z.rbegin() , z.rend()
// =============================================
//1.integer overflow (1e5 * 1e5) (2e9 + 2e9) // 2.runtime error //3.boundary condition
 
void solve()
{
    ll n , m , s = 0;
    cin >> n >> m;
    ll a[m+2]; a[0] = 0;
    fo(i , m)cin >> a[i];
    a[m+1] = n+1; 
    sort(a , a+m+2);
    vll v;
    fo(i , m+1)
    {
        if((a[i]-a[i-1]-1) > 0)
        {
            v.pb(a[i]-a[i-1]-1);
        }
    }

    if(v.size()==0){
        cout << "0" << endl;
        return;
    }
    ll k = *min_element(all(v)) , ans = 0;
    for(ll j = 0 ; j < v.size() ; j++)
    {
        ans += (v[j]+k-1)/k;
    } 
    cout << ans << endl;
}
int main()
{
   ios_base::sync_with_stdio(false);
   cin.tie(NULL);
   
   solve();
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;

int main() {
  ll n, m; cin >> n >> m;
  vector<ll> a(m); for(int i = 0; i < m; i++) cin >> a[i];
  sort(a.begin(), a.end());
  a.insert(a.begin(), 0);
  a.push_back(n+1);

  vector<ll> v;
  ll k = n;
  for(int i = 0; i+1 < a.size(); i++) {
    ll len = a[i+1] - a[i] - 1;
    if(len > 0) {
      v.push_back(len);
      k = min(k, len);
    }
  }

  ll ans = 0;
  for(auto len: v) ans += (len+k-1) / k;
  cout << ans << endl;
  return 0;
}
