#include <bits/stdc++.h> // NeOWami
using namespace std;
#define ft first
#define sc second
const int N = 37;
int n, m, ans = -1;
vector<int> G[N];
namespace sub1{
bool TT[N];
bool check() {
for (int i = 1; i <= n; i++) if (!TT[i]) return 0;
return 1;
}
void solve() {
for (int msk = 0; msk < (1 << n); msk++) {
for (int i = 1; i <= n; i++) TT[i] = 0;
for (int i = 1; i <= n; i++) if (msk >> (i - 1) & 1) {
TT[i] = !TT[i];
for (int v: G[i]) TT[v] = !TT[v];
}
if (check()) {
if (ans == -1 || ans > __builtin_popcount(msk)) ans = __builtin_popcount(msk);
}
}
cout << ans;
}
}///
namespace subfull{
using ll = long long;
using pli = pair<ll, int>;
int HPT[N][N];
void calc(int left, int right, bool addOne, vector<pli> &Group) {
int len = right - left + 1;
for (int msk = 0; msk < (1 << len); msk++) {
ll mskOfHPT = 0;
for (int i = 1; i <= n; i++) {
int val = (addOne) ? 0 : 1;
for (int light = left; light <= right; light++) if (msk >> (light - left) & 1) {
val = (val + HPT[i][light] * 1) % 2;
}
mskOfHPT |= (val * 1LL << (i - 1));
}
Group.push_back({mskOfHPT, __builtin_popcount(msk)});
}
sort(Group.begin(), Group.end());
}
void solve() {
int mid = n / 2;
for (int i = 1; i <= n; i++) {
HPT[i][i] = 1;
for (int j: G[i]) HPT[i][j] = 1;
}
vector<pli> LeftGroup, RightGroup;
calc(1, mid, 0, LeftGroup);
calc(mid + 1, n, 1, RightGroup);
for (pli item: LeftGroup) {
int id = lower_bound(RightGroup.begin(), RightGroup.end(), (pli){item.ft, -1}) - RightGroup.begin();
if (id < RightGroup.size() && item.ft == RightGroup[id].ft) {
int sum = item.sc + RightGroup[id].sc;
if (ans == -1 || ans > sum) ans = sum;
}
}
cout << ans;
}
}///
signed main() {
cin.tie(NULL)->sync_with_stdio(false);
if(ifstream("Input.inp")) {
freopen("Input.inp", "r", stdin);
freopen("Output.out", "w", stdout);
}
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v; cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
// if (n <= 21) return sub1::solve(), 0;
return subfull::solve(), 0;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKCmNvbnN0IGludCBOID0gMzc7CmludCBuLCBtLCBhbnMgPSAtMTsKdmVjdG9yPGludD4gR1tOXTsKCm5hbWVzcGFjZSBzdWIxewpib29sIFRUW05dOwpib29sIGNoZWNrKCkgewogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBpZiAoIVRUW2ldKSByZXR1cm4gMDsKICAgIHJldHVybiAxOwp9CnZvaWQgc29sdmUoKSB7CiAgICBmb3IgKGludCBtc2sgPSAwOyBtc2sgPCAoMSA8PCBuKTsgbXNrKyspIHsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIFRUW2ldID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGlmIChtc2sgPj4gKGkgLSAxKSAmIDEpICB7CiAgICAgICAgICAgIFRUW2ldID0gIVRUW2ldOwogICAgICAgICAgICBmb3IgKGludCB2OiBHW2ldKSBUVFt2XSA9ICFUVFt2XTsKICAgICAgICB9CiAgICAgICAgaWYgKGNoZWNrKCkpIHsKICAgICAgICAgICAgaWYgKGFucyA9PSAtMSB8fCBhbnMgPiBfX2J1aWx0aW5fcG9wY291bnQobXNrKSkgYW5zID0gX19idWlsdGluX3BvcGNvdW50KG1zayk7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnM7Cn0KfS8vLwoKbmFtZXNwYWNlIHN1YmZ1bGx7CnVzaW5nIGxsID0gbG9uZyBsb25nOwp1c2luZyBwbGkgPSBwYWlyPGxsLCBpbnQ+OwppbnQgSFBUW05dW05dOwp2b2lkIGNhbGMoaW50IGxlZnQsIGludCByaWdodCwgYm9vbCBhZGRPbmUsIHZlY3RvcjxwbGk+ICZHcm91cCkgewogICAgaW50IGxlbiA9IHJpZ2h0IC0gbGVmdCArIDE7CiAgICBmb3IgKGludCBtc2sgPSAwOyBtc2sgPCAoMSA8PCBsZW4pOyBtc2srKykgewogICAgICAgIGxsIG1za09mSFBUID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgaW50IHZhbCA9IChhZGRPbmUpID8gMCA6IDE7CiAgICAgICAgICAgIGZvciAoaW50IGxpZ2h0ID0gbGVmdDsgbGlnaHQgPD0gcmlnaHQ7IGxpZ2h0KyspIGlmIChtc2sgPj4gKGxpZ2h0IC0gbGVmdCkgJiAxKSB7CiAgICAgICAgICAgICAgICB2YWwgPSAodmFsICsgSFBUW2ldW2xpZ2h0XSAqIDEpICUgMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBtc2tPZkhQVCB8PSAodmFsICogMUxMIDw8IChpIC0gMSkpOwogICAgICAgIH0KICAgICAgICBHcm91cC5wdXNoX2JhY2soe21za09mSFBULCBfX2J1aWx0aW5fcG9wY291bnQobXNrKX0pOwogICAgfQogICAgc29ydChHcm91cC5iZWdpbigpLCBHcm91cC5lbmQoKSk7Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIGludCBtaWQgPSBuIC8gMjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIEhQVFtpXVtpXSA9IDE7CiAgICAgICAgZm9yIChpbnQgajogR1tpXSkgSFBUW2ldW2pdID0gMTsKICAgIH0KICAgIHZlY3RvcjxwbGk+IExlZnRHcm91cCwgUmlnaHRHcm91cDsKICAgIGNhbGMoMSwgbWlkLCAwLCBMZWZ0R3JvdXApOwogICAgY2FsYyhtaWQgKyAxLCBuLCAxLCBSaWdodEdyb3VwKTsKICAgIGZvciAocGxpIGl0ZW06IExlZnRHcm91cCkgewogICAgICAgIGludCBpZCA9IGxvd2VyX2JvdW5kKFJpZ2h0R3JvdXAuYmVnaW4oKSwgUmlnaHRHcm91cC5lbmQoKSwgKHBsaSl7aXRlbS5mdCwgLTF9KSAtIFJpZ2h0R3JvdXAuYmVnaW4oKTsKICAgICAgICBpZiAoaWQgPCBSaWdodEdyb3VwLnNpemUoKSAmJiBpdGVtLmZ0ID09IFJpZ2h0R3JvdXBbaWRdLmZ0KSB7CiAgICAgICAgICAgIGludCBzdW0gPSBpdGVtLnNjICsgUmlnaHRHcm91cFtpZF0uc2M7CiAgICAgICAgICAgIGlmIChhbnMgPT0gLTEgfHwgYW5zID4gc3VtKSBhbnMgPSBzdW07CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnM7Cn0KfS8vLwoKc2lnbmVkIG1haW4oKSB7CiAgICBjaW4udGllKE5VTEwpLT5zeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgaWYoaWZzdHJlYW0oIklucHV0LmlucCIpKSB7CiAgICAgICAgZnJlb3BlbigiSW5wdXQuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiT3V0cHV0Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKICAgICAgICBHW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBHW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KCiAgICAvLyBpZiAobiA8PSAyMSkgcmV0dXJuIHN1YjE6OnNvbHZlKCksIDA7CiAgICByZXR1cm4gc3ViZnVsbDo6c29sdmUoKSwgMDsKICAgIHJldHVybiAwOwp9