#include <cstdio>
#include <algorithm>

using namespace std;

int a[200005];

int main()
{
	int n, m;
	scanf("%d%d", &n, &m);
	a[0] = 0;
	a[m + 1] = n + 1;
	for (int i = 1; i <= m; i++) {
		scanf("%d", &a[i]);
	}
	sort(a + 1, a + 1 + m);
	int g = 1e9;
	for (int i = 1; i <= m + 1; i++) {
		if (a[i] - a[i - 1] - 1) {
			g = min(g, a[i] - a[i - 1] - 1);
		}
	}
	int ans = 0;
	for (int i = 1; i <= m + 1; i++) {
		if (a[i] - a[i - 1] - 1) {
			ans += (a[i] - a[i - 1] - 1 + g - 1) / g;
		}
	}
	printf("%d\n", ans);
	return 0;
}

/* How To Solve It
 1st. Understanding The Problem
    未知なもの、データ(与件), 条件 は何か？
    その条件は未知を決定するために十分か？
    条件を分解せよ, 図を描け
 2nd. Devising A Plan
    類似、関連のある問題、典型問題を知らないか？
    役立ちそうな定理やアルゴリズムを知らないか？
    問題の一部を解決できるか、一部だけ残して他を切り捨ててみろ
    既知のものやデータを変えることはできるか？
 3rd. Carrying Out The Plan
    各ステップで誤りがないか、正しいと説明できるか？
 4th. Looking Back
    別解、他の問題に使えそうなものはあるか？
*/
/*{{{ #include */
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <map>
#include <tuple>
#include <algorithm>
#include <utility>
#include <cmath>/*}}}*/
/*{{{ namespace R2357 */
namespace R2357 {
    inline void IN(void){return;}
    template<class F,class... R>inline void IN(F& f,R&... r){std::cin>>f;IN(r...);}
    template <class T>inline void OUT(T x){std::cout<<x<<'\n';}
    template<class T>inline bool chmin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
    template<class T>inline bool chmax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
    template<class T=int>T read(){
        T x=0; char c;
        while(((c=getchar())>'9'||c<'0')&&c!='-');
        const bool f=(c=='-')&&(c=getchar());
        while(x=x*10-48+c,(c=getchar())>='0'&&c<='9');
        return f?-x:x;
    }
    template<class T>std::istream& operator>>(std::istream& is,std::vector<T>& V){
        for(auto& v:V)is>>v; return is;
    }
    template<class T1,class T2>
    std::istream& operator>>(std::istream& is,std::pair<T1,T2>& P){
        return is>>P.first>>P.second;
    }
    template<class T>inline T ceil_div(T a,T b){
    	return (a+(b-1))/b;
    }
    namespace debug {
        using namespace std;
        void Write(void){cerr<<endl;}
        template<class F,class...R>void Write(F f,R...r){cerr<<' '<<f;Write(r...);}
        template<class T>void Write(vector<T>& V,int n=-1){
            if(n==-1) n = V.size();
            for(int i=0;i<n;i++)cerr<<' '<<V[i]; cerr<<endl;
        }
        template<class T,class U> void Write(pair<T,U>& p){cerr<<' '<<'{'<<p.first<<','<<p.second<<'}'<<endl;}
        #include <cxxabi.h>
        template<class T>string TypeName(T& x){
            return string(abi::__cxa_demangle(typeid(T).name(), 0, 0, 0));
        }
    }
}
/*}}}*/
/*{{{ using */
using namespace std; using namespace R2357;
using ll=long long; using ld=long double;
using pint=pair<int,int>;/*}}}*/
/*{{{ #define */
#define rep(i,a,b) for(ll i=a;i<ll(b);i++)
#define repr(i,a,b) for(ll i=a;i>=ll(b);i--)
#define each(x,v) for(auto& x:v)
#define el '\n'
#define ALL(x) x.begin(),x.end()
#define ALLR(x) x.rbegin(),x.rend()
#define Unique(x) x.erase(unique(x.begin(),x.end()),x.end())
#define Fill(v,n) fill(v,v+sizeof(v)/sizeof(*v),n)
#define max_element(x) *max_element(x.begin(),x.end())
#define min_element(x) *min_element(x.begin(),x.end())
#define INF 1073741824 // 2e30
#define INFL 2305843009213693952ll // 2e61
#define _FASTIO_ ios::sync_with_stdio(false),cin.tie(nullptr);
/*}}}*/

/* NOTE
 0.
*/
// using namespace debug;

vector<pair<char, int>> RunLength_encode(const string& s) {
    vector<pair<char, int>> res;
    ll len = s.size();
    ll l = 0;
    while(l < len){
        int r = l + 1;
        while(r < len && s[l] == s[r]) r++;
        res.push_back({s[l], r-l});
        l = r;
    }
    return res;
}
int main(){ _FASTIO_
    int n, m; IN(n, m);
    string f(n, '.');
    rep(_, 0, m) f[read()-1] = '#';
    auto r = RunLength_encode(f);

    int k = INF;
    each(x, r) if(x.first == '.') chmin(k, x.second);
    ll ans = 0;
    each(x, r) if(x.first == '.') ans += ceil_div(x.second, k);
    OUT(ans);
    return 0;
}
