#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main(){
  int n, m;
  cin >> n >> m;
  vector<int> A(m);
  for(int i = 0; i < m; ++i)
    cin >> A[i];
  m += 2;
  A.emplace_back(0);
  A.emplace_back(n+1);
  sort(A.begin(), A.end());
  int d = n;
  for(int i = 1; i < m; ++i){
    if(A[i] == A[i-1]+1) continue;
    d = min(d,A[i]-A[i-1]-1);
  }

  int ans = 0;
  for(int i = 1; i < m; ++i){
    int dd = A[i] - A[i-1] - 1;
    if(!dd) continue;
    ans += max(0,(dd+d-1)/d);
  }
  cout << ans << endl;
}

#include <bits/stdc++.h>

using namespace std ;
#define rep(i,n) for( int i = 0 ; i < n ; i++ )
typedef long long ll ;

const ll mod = 1e9 + 7 ;

ll upper_cal(ll n,ll m){
    if( n%m == 0)return n/m ;
    else return n/m + 1 ;
}

int main(){
    ll n  , m ;
    cin >> n >> m ; 
    if( m == 0 ){
        cout << 1 << endl ;
        return 0 ; 
    }
    if( m == n ){
        cout << 0 << endl ;
        return 0 ;
    }
    vector<ll> A(m+2) ;
    A[0] = -1 ;
    A[m+1] = n ;
    rep(i,m){
        cin >> A.at(i+1) ;
        A.at(i+1)-- ;
    } 
    sort(A.begin(),A.end()) ;
    ll range = n ;
    for(ll i =  0 ; i < m + 1 ; i++ ){
        ll tmp = max((ll)0, A.at(i+1) - A.at(i) - 1 ) ;
        if( tmp != 0 ) range = min( range , tmp ) ;
    }
    ll ans = 0 ;
    for(ll i =  0 ; i < m + 1 ; i++ ){
        ll tmp = max((ll)0, A.at(i+1) - A.at(i) - 1 ) ;
        if( tmp != 0 ) ans +=upper_cal(tmp,range) ;
    }
    cout << ans << endl ;
}

