#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int cnt[N];
int dp[N][5][3];
int n, m;
void opti(int &a, int b) {
  if (a < b) a = b;
}
int solve(int i, int j, int k) {
  int &res = dp[i][j][k];
  if (i == m + 3) return 0;
  if (res != -1) return res;
  res = 0;
  int f = cnt[i - 2] - j;
  int s = cnt[i - 1] - k;
  int mn = min({2, f, s, cnt[i]});
  for (int add = 0; add <= mn; add++) {
    opti(res, solve(i + 1, k + add, add) + add + (f - add) / 3);
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    cnt[x]++;
  }
  memset(dp, -1, sizeof(dp));
  cout << solve(3, 0, 0);
  return 0;
}
