#include <bits/stdc++.h>
using namespace std;
int a[110];
int dp[110][110];
map<int, int> mp;
bool cmp(int p, int q) { return p > q; }
int main() {
  int n, m;
  while (scanf("%d%d", &n, &m) == 2) {
    memset(a, 0, sizeof(a));
    memset(dp, 0, sizeof(dp));
    int u;
    int b = -1;
    for (int i = 1; i <= m; i++) {
      cin >> u;
      a[u]++;
      b = max(b, u);
    }
    sort(a + 1, a + 110, cmp);
    int ans = 0, l = 0;
    for (int i = 0; i <= b; i++) {
      if (a[i]) l++;
    }
    for (int i = 1; i <= n; i++) {
      dp[1][i] = a[1] / i;
    }
    for (int i = 1; i <= l; i++) {
      dp[i][1] = a[1];
    }
    for (int i = 2; i <= l; i++) {
      for (int j = 1; j <= n; j++) {
        for (int k = 0; k < j; k++) {
          dp[i][j] = max(dp[i][j], min(dp[i - 1][k], a[i] / (j - k)));
        }
      }
    }
    int Max = 0;
    for (int i = 1; i <= l; i++) {
      Max = max(dp[i][n], Max);
    }
    cout << Max << endl;
  }
  return 0;
}
