#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 500;
int g[MAXN][MAXN];
int best_cost = 1000000000;
void mincut(int n) {
vector<int> v[MAXN];
for (int i=0; i<n; ++i)
v[i].assign (1, i);
int w[MAXN];
bool exist[MAXN], in_a[MAXN];
for (auto &e:exist){
e = true;
}
for (int ph=0; ph<n-1; ++ph) {
for (auto &e:in_a){
e = false;
}
for (auto &e:w){
e = 0;
}
for (int it=0, prev; it<n-ph; ++it) {
int sel = -1;
for (int i=0; i<n; ++i)
if (exist[i] && !in_a[i] && (sel == -1 || w[i] > w[sel]))
sel = i;
if (it == n-ph-1) {
if (w[sel] < best_cost)
best_cost = w[sel];
v[prev].insert (v[prev].end(), v[sel].begin(), v[sel].end());
for (int i=0; i<n; ++i)
g[prev][i] = g[i][prev] += g[sel][i];
exist[sel] = false;
}
else {
in_a[sel] = true;
for (int i=0; i<n; ++i)
w[i] += g[sel][i];
prev = sel;
}
}
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++){
int a,b;
cin >> a >> b;
a--;
b--;
g[a][b] = 1;
g[b][a] = 1;
}
mincut (n);
cout << best_cost;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTUFYTiA9IDUwMDsKaW50IGdbTUFYTl1bTUFYTl07CmludCBiZXN0X2Nvc3QgPSAxMDAwMDAwMDAwOwogCnZvaWQgbWluY3V0KGludCBuKSB7Cgl2ZWN0b3I8aW50PiB2W01BWE5dOwoJZm9yIChpbnQgaT0wOyBpPG47ICsraSkKCQl2W2ldLmFzc2lnbiAoMSwgaSk7CglpbnQgd1tNQVhOXTsKCWJvb2wgZXhpc3RbTUFYTl0sIGluX2FbTUFYTl07Cglmb3IgKGF1dG8gJmU6ZXhpc3QpewoJCWUgPSB0cnVlOwoJfQoJZm9yIChpbnQgcGg9MDsgcGg8bi0xOyArK3BoKSB7CgkJZm9yIChhdXRvICZlOmluX2EpewoJCQllID0gZmFsc2U7CgkJfQoJCWZvciAoYXV0byAmZTp3KXsKCQkJZSA9IDA7CgkJfQoJCWZvciAoaW50IGl0PTAsIHByZXY7IGl0PG4tcGg7ICsraXQpIHsKCQkJaW50IHNlbCA9IC0xOwoJCQlmb3IgKGludCBpPTA7IGk8bjsgKytpKQoJCQkJaWYgKGV4aXN0W2ldICYmICFpbl9hW2ldICYmIChzZWwgPT0gLTEgfHwgd1tpXSA+IHdbc2VsXSkpCgkJCQkJc2VsID0gaTsKCQkJaWYgKGl0ID09IG4tcGgtMSkgewoJCQkJaWYgKHdbc2VsXSA8IGJlc3RfY29zdCkKCQkJCQliZXN0X2Nvc3QgPSB3W3NlbF07CgkJCQl2W3ByZXZdLmluc2VydCAodltwcmV2XS5lbmQoKSwgdltzZWxdLmJlZ2luKCksIHZbc2VsXS5lbmQoKSk7CgkJCQlmb3IgKGludCBpPTA7IGk8bjsgKytpKQoJCQkJCWdbcHJldl1baV0gPSBnW2ldW3ByZXZdICs9IGdbc2VsXVtpXTsKCQkJCWV4aXN0W3NlbF0gPSBmYWxzZTsKCQkJfQoJCQllbHNlIHsKCQkJCWluX2Fbc2VsXSA9IHRydWU7CgkJCQlmb3IgKGludCBpPTA7IGk8bjsgKytpKQoJCQkJCXdbaV0gKz0gZ1tzZWxdW2ldOwoJCQkJcHJldiA9IHNlbDsKCQkJfQoJCX0KCX0KfQppbnQgbWFpbigpIHsKCWludCBuLCBtOwoJY2luID4+IG4gPj4gbTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKXsKCQlpbnQgYSxiOwoJCWNpbiA+PiBhID4+IGI7CgkJYS0tOwoJCWItLTsKCQlnW2FdW2JdID0gMTsKCQlnW2JdW2FdID0gMTsKCX0KCW1pbmN1dCAobik7Cgljb3V0IDw8IGJlc3RfY29zdDsKCQlyZXR1cm4gMDsKfQ==