#include <bits/stdc++.h>
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];
  sort(a.begin(), a.end());
  a.insert(a.begin(), 0);
  a.push_back(n + 1);
  vector<int> v;
  int mn = n;
  for (int i = 0; i + 1 < (int)a.size(); ++i) {
    int len = a[i + 1] - a[i] - 1;
    if (len > 0) {
      v.push_back(len);
      mn = min(mn, len);
    }
  }
  int ans = 0;
  for (auto len : v) ans += (len + mn - 1) / mn;
  cout << ans << endl;
}

#include <bits/stdc++.h>
using namespace std;
void __print(int x) {cout << x;}
void __print(long x) {cout << x;}
void __print(long long x) {cout << x;}
void __print(unsigned x) {cout << x;}
void __print(unsigned long x) {cout << x;}
void __print(unsigned long long x) {cout << x;}
void __print(float x) {cout << x;}
void __print(double x) {cout << x;}
void __print(long double x) {cout << x;}
void __print(char x) {cout << '\'' << x << '\'';}
void __print(const char *x) {cout << '\"' << x << '\"';}
void __print(const string &x) {cout << '\"' << x << '\"';}
void __print(bool x) {cout << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cout << '{'; __print(x.first); cout << ','; __print(x.second); cout << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cout << '{'; for (auto &i: x) cout << (f++ ? "," : ""), __print(i); cout << "}";}
void _print() {cout << "\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cout << ", "; _print(v...);}
#define debug(x...) cout << #x << " = "; _print(x)
typedef long long ll; typedef vector<int> vi; typedef vector<ll> vll;
#define rep(i,a,b) for (ll i = (a); i < (b); ++i)
#define per(i,a,b) for (int i = (b)-1; i >= (a); --i)
#define all(x) begin(x), end(x)
#define mp make_pair 
#define pb push_back
#define ff first
#define ss second
#define fast ios_base::sync_with_stdio(NULL);cin.tie(NULL);cout.tie(NULL) 
const int mod = 1e9 + 7, mxn = 1e5 + 1;

int solve(){
    int n, m;
    cin>> n>> m;
    if(m == 0){
        return cout<< 1<< "\n", 0;
    }
    int a[m];
    rep(i, 0, m){
        cin>> a[i];
    }
    sort(a, a + m);
    int mn = a[0] - 1;
    if(mn == 0){
        mn = INT_MAX;
    }
    for(int i = 1; i < m; i++){
        if(a[i] != a[i - 1] + 1){
            mn = min(mn, a[i] - a[i - 1] - 1);
        }
    }
    if(mn == INT_MAX){
        return cout<< 0<< "\n", 0;
    }
    ll ans = 0;
    ans = (a[0] - 1 + mn - 1) / mn;
    for(int i = 1; i < m; i++){
        ans += (a[i] - a[i - 1] - 1 + mn - 1) / mn;
    }
    ans += (n - a[m - 1] + mn - 1) / mn;
    cout<< ans<< "\n";
    return 0;
}
//Counting problems: Sometimes easier to find complement of the answer
 
int main()
{
    fast;
    int t = 1;
    // cin>> t;
    while(t--){  
        solve();
    }
    return 0;
}
//v.clear(), vis.clear(); vis.resize(n + 1, 0), v.resize(n + 1);
 
/*  inv[1] = 1; // inv is ll
    for(int i=2; i<=mxn; ++i)
        inv[i]=mod-mod/i*inv[mod%i]%mod;*/
        
// lower bound   >=  
// upper bound   >
// vector<int>().swap(vec); //free memory from vec
