#include<bits/stdc++.h>
#define fio             ios_base::sync_with_stdio(0);cin.tie(NULL);
#define ll              long long
#define ld              long double
#define tc              int t; cin>>t; while(t--)
using namespace std;

const int MAX=1e5+1;
const int mod=1e9+7;

int main(){
    fio
    int n,m,tmp=0,res=0;
    cin>>n>>m;
    vector<int>ans;
    int a[m];
    for(int i=0;i<m;i++){
        cin>>a[i];
    }
    sort(a,a+m);
    for(int i=0;i<m;i++){
        int dist=a[i]-tmp-1;
        if(dist>0)
            ans.push_back(dist);
        tmp=a[i];
    }
    if(n!=tmp)
        ans.push_back(n-tmp);
    sort(ans.begin(),ans.end());
    if(ans.size()>0){
        tmp=ans[0];
        for(auto x: ans){
            res+=ceil((ld)x/tmp);
        }
    }
    cout<<res<<endl;
}
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long int ull;
typedef long long int ll;
typedef long double ld;
#define Mod 1000000007
#define Infinity (ll)1e18
#define Append(a) push_back(a)
#define Pair(a,b) make_pair(a,b)
#define Clear(a) for(ll &x : a){x=0;}
#define Point(x) std::fixed<<setprecision(15)<<x
#define SetBits(x) __builtin_popcount(x);
#define GoogleOutput(i,x) cout<<"Case #"<<i<<": "<<x<<'\n'
#define FastIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);


int SubtreeSizes(vector<int>g[],vector<int>&dp,int u){
  if(g[u].empty()){
    return dp[u]= 1;
  }
  dp[u] = 1;
  for(int &v : g[u]){
    dp[u]+=SubtreeSizes(g,dp,v);
  }
  return dp[u];
}

int MaxCostToLeaf(vector<int>g[],vector<int>&cost,int u,vector<int>&dp){
   if(g[u].empty()){
     return dp[u] = cost[u];
   }
   dp[u] = cost[u];
   for(int &v : g[u]){
     dp[u] = max(dp[u],cost[u]+MaxCostToLeaf(g,cost,v,dp));
   }
   return dp[u];
}

int MaxCostSubset(vector<int>g[],vector<vector<int>>&dp,vector<int>&cost,int u){
  if(g[u].empty()){
    dp[u][0] =0;
    dp[u][1] = cost[u];
    return max(dp[u][0],dp[u][1]);
  }  

  dp[u][1] = cost[u];
  for(int &v : g[u]){
    dp[u][1] +=MaxCostSubset(g,dp,cost,v);
  }
  


  return max(dp[u][0],dp[u][1]);
}


void Quicktest(){
   int n;
   cin>>n;
   int m = n-1;
   vector<int>g[n+1];
   vector<int>cost(n+1,0);
   vector<vector<int>>dp(n+1,vector<int>(2,0));
   for(int i=1;i<=n;i++){
     cin>>cost[i];
   }   
   while(m--){
     int x,y;
     cin>>x>>y;
     g[x].emplace_back(y);
   }
      
}




int main(){
  FastIO;
  ll n,w;
  cin>>n>>w;
  cout<<(n/w);
  return 0;
} 
