#define _USE_MATH_DEFINES
#include <iostream>
#include <sstream>
#include <string>
#include <list>
#include <vector>
#include <queue>
#include <algorithm>
#include <climits>
#include <cstring>
#include <cmath>
#include <stack>
#include <iomanip>
#include <tuple>
#include <functional>
#include <cfloat>
#include <map>
#include <set>
#include <array>
#include <stdio.h>
#include <string.h>
#include <random>
#include <cassert>
using ll = long long;
using ull = unsigned long long;
using uint = unsigned int;
using namespace std;
#define int long long
#define CONTAINS_VEC(v,n) (find((v).begin(), (v).end(), (n)) != (v).end())
#define SORT(v) sort((v).begin(), (v).end())
#define RSORT(v) sort((v).rbegin(), (v).rend())
#define ARY_SORT(a, size) sort((a), (a)+(size))
#define REMOVE(v,a) (v.erase(remove((v).begin(), (v).end(), (a)), (v).end()))
#define REVERSE(v) (reverse((v).begin(), (v).end()))
#define ARY_REVERSE(v,a) (reverse((v), (v)+(a)))
#define REP(i, n) for (int (i)=0; (i) < (n); (i)++)
#define REPE(i, n) for (int (i)=0; (i) <= (n); (i)++)
#define CONTAINS_MAP(m, a) ((m).find((a)) != m.end())
#define CONTAINS_SET(m, a) ((m).find((a)) != m.end())
void YesNo(bool b) { cout << (b ? "Yes" : "No") << endl; exit(0); }
void Yes() { cout << "Yes" << endl; exit(0); }
void No() { cout << "No" << endl; exit(0); }


int N, M;
int A[200010];

signed main()
{
	cin >> N >> M;
	REP(i, M) cin >> A[i + 1];
	A[0] = 0;
	A[M + 1] = N + 1;

	ARY_SORT(A, M + 2);

	int k = INT_MAX;
	for (int i = 0; i <= M; i++)
	{
		if (A[i + 1] - A[i] == 1) continue;
		k = min(k, A[i + 1] - A[i] - 1);
	}

	int ans = 0;

	for (int i = 0; i <= M; i++)
	{
		if (A[i + 1] - A[i] == 1) continue;

		int s = A[i + 1] - A[i] - 1;
		ans += ((s + (k - 1)) / k);
	}

	cout << ans << endl;
}



#include <bits/stdc++.h>
using namespace std;
typedef long long  ll;
typedef vector<vector<vector<int> > > vvvi;
typedef vector<vector<int> > vvi;
int main(){
  int n,m;
  cin>>n>>m;
  vector<int> wid;
  int pre = 0;
  vector<int> a(m);
  for(int i =0; i<m; i++){
    cin>>a.at(i);
  }
  sort(a.begin(), a.end());
  for(int i =0; i<m; i++){
    int tmp = a.at(i);
    if(tmp-pre != 1) wid.push_back(tmp-pre-1);
    pre = tmp;
  }
  int ans =0;
    
  if(pre!=n) wid.push_back(n+1-pre-1);
  if(wid.size() >0){
    sort(wid.begin(), wid.end());
    int haba = wid.at(0);
    for(int i =0; i<wid.size(); i++){
      ans += ((wid.at(i)-1)/haba)+1;
    }
  }
  cout<<ans<<endl;
}
