#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

long long solve(int N, int M, vector<int> A)
{
	A.push_back(0);
	A.push_back(N + 1);

	sort(A.begin(), A.end());

	vector<int> B;
	for (int i = 1; i <= M + 1; ++i) {
		int D = A[i] - A[i - 1] - 1;
		if (D != 0) {
			B.push_back(D);
		}
	}

	if (B.empty()) {
		return 0;
	}

	long long k = *min_element(B.begin(), B.end());
	long long ans = 0;
	for (auto y : B) {
		ans += (y + k - 1) / k;
	}
	return ans;
}

int main()
{
	int N, M;
	cin >> N >> M;
	vector<int> A(M);
	for (auto& x : A) {
		cin >> x;
	}

	cout << solve(N, M, A) << endl;
}

// Template
#include "bits/stdc++.h"
#define rep_override(x, y, z, name, ...) name
#define rep2(i, n) for (int i = 0; i < (int)(n); ++i)
#define rep3(i, l, r) for (int i = (int)(l); i < (int)(r); ++i)
#define rep(...) rep_override(__VA_ARGS__, rep3, rep2)(__VA_ARGS__)
#define all(x) (x).begin(), (x).end()
using namespace std;
using ll = long long;
constexpr int inf = 1001001001;
constexpr ll INF = 3003003003003003003LL;
template <typename T>
inline bool chmin(T &x, const T &y) {
    if (x > y) {
        x = y;
        return true;
    }
    return false;
}
template <typename T> 
inline bool chmax(T &x, const T &y) {
    if (x < y) {
        x = y;
        return true;
    }
    return false;
}
struct IOSET {
    IOSET() {
        cin.tie(nullptr);
        ios::sync_with_stdio(false);
        cout << fixed << setprecision(10);
    }
} ioset;
template <typename T>
istream &operator>>(istream &is, vector<T> &vec) {
    for (T &element : vec) is >> element;
    return is;
}
template <typename T>
ostream &operator<<(ostream &os, vector<T> &vec) {
    for (int i = 0, vec_len = (int)vec.size(); i < vec_len; ++i) {
        os << vec[i] << (i + 1 == vec_len ? "" : " ");
    }
    return os;
}

// Main
int main() {
    int n, m;
    cin >> n >> m;
    vector<int> a(m);
    cin >> a;
    if (m == 0) {
        cout << "1\n";
        return 0;
    }
    
    sort(all(a));
    vector<int> vec;
    rep(i, m) {
        if (i == 0 && a[i] != 1) vec.push_back(a[i] - 1);
        else if (a[i] - a[i - 1] != 1) vec.push_back(a[i] - a[i - 1] - 1);
    }
    if (a[m - 1] != n) vec.push_back(n - a[m - 1]);
    if (vec.empty()) {
        cout << "0\n";
        return 0;
    }
    int k = *min_element(all(vec));
    int ans = 0;
    for (int x : vec) ans += (x + k - 1) / k;
    cout << ans << "\n";
}
