#include <bits/stdc++.h>
using namespace std;
const int inf = INT_MAX;
const long long infll = LONG_LONG_MAX;
const long long mod = 1000000007LL;
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
long long n, I, d[404040], s[404040];
vector<long long> v;
long long ans = infll, mx;
long long get(long long x) {
  return lower_bound((v).begin(), (v).end(), x) - v.begin() + 1;
}
int main() {
  scanf("%lld %lld", &n, &I);
  for (int i = 0; i < n; i++) scanf("%lld", &d[i]), v.push_back(d[i]);
  sort((v).begin(), (v).end());
  v.erase(unique((v).begin(), (v).end()), v.end());
  for (int i = 0; i < n; i++) {
    long long t = get(d[i]);
    s[t]++;
    mx = max(mx, t);
  }
  for (int i = 1; i <= mx; i++) s[i] += s[i - 1];
  I *= 8;
  long long tmp = I / n;
  if (tmp > 30) {
    puts("0");
    return 0;
  }
  long long ttmp = (1 << tmp);
  if (ttmp >= mx) {
    puts("0");
    return 0;
  }
  for (int i = 1; i <= mx; i++) {
    if (i + ttmp - 1 > mx) break;
    ans = min(ans, n - s[i + ttmp - 1] + s[i - 1]);
  }
  printf("%lld", ans);
}
