#include <bits/stdc++.h>
using namespace std;
const int INF = (int)(1e9 + 1337);
const double EPS = (double)(1e-7);
struct state {
  int pos;
  int pp;
  int p;
  bool operator==(const state& b) const {
    return pos == b.pos && p == b.p && pp == b.pp;
  }
};
struct statehash {
  size_t operator()(const state& s) const {
    return hash<int>()(s.pos) ^ hash<int>()(s.p) ^ hash<int>()(s.pp);
  }
};
unordered_map<state, int, statehash> f;
int n, m;
int cnt[1000010];
int dyn(state st) {
  if (st.pos > m + 5) {
    return 0;
  }
  auto it = f.find(st);
  if (it != f.end()) {
    return it->second;
  }
  int res = 0;
  int mn = min(min(st.pp, st.p), cnt[st.pos]);
  for (int i = 0; i <= min(2, mn); ++i) {
    int left = (st.pp - i) / 3;
    res = max(res, dyn({st.pos + 1, st.p - i, cnt[st.pos] - i}) + i + left);
  };
  return f[st] = res;
}
void solve() {
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    int a;
    cin >> a;
    ++cnt[a];
  }
  f.reserve(10000000);
  f.max_load_factor(0.25);
  cout << dyn({1, 0, 0});
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  solve();
  return 0;
}
