#include <bits/stdc++.h>
using namespace std;
struct vec {
  long double x, y;
  bool operator==(const vec &a) const { return x == a.x && y == a.y; }
  bool operator<(const vec &a) const {
    if (a.x != x) return x < a.x;
    return y < a.y;
  }
  vec operator+(const vec &a) const { return {x + a.x, y + a.y}; }
  vec operator*(const long double &a) const { return {x * a, y * a}; }
  vec operator-(const vec &a) const { return {x - a.x, y - a.y}; }
  vec operator/(const long double &a) const { return {x / a, y / a}; }
  long double len() const { return sqrt(x * x + y * y); }
  long double dot(const vec &a) const { return x * a.x + y * a.y; }
  long double crs(const vec &a) const { return x * a.y - y * a.x; }
  vec proj(const vec &a) const {
    return (a / a.len()) * (*this).dot(a) / a.len();
  }
};
struct P {
  int x, y;
};
bool as(P a, P b) { return a.x < b.x; }
long long x, y, z, mod = 1000000007;
vector<int> v;
int i, n, m, k, a, d, b, c;
int e;
int o[1111];
int l[1];
int j[1];
stack<int> s;
vec u[1111];
string r, r1, r2;
int main() {
  scanf("%d %d", &a, &b);
  for (int t = 1; t <= a; t++) {
    scanf("%d", &n);
    o[n]++;
  }
  n = 0;
  for (int t = 1; t <= b; t++) {
    n += o[t] % 2;
    k += o[t] / 2 * 2;
    if (n == 2) k++, n = 0;
  }
  k += n;
  printf("%d", k);
}
