#include <bits/stdc++.h>
using namespace std;
const int N = 310;
struct node{
int d, x;
};
vector <int> g[N];
int n, m, ans;
int d[N];
bool vis[N], v[N];
bool operator > (const node &a, const node &b) {
return a.d > b.d;
}
priority_queue <node, vector <node>, greater <node> > q;
int cut(int x, int fa) {
int num;
v[x] = 1;
vis[x] = 1;
for (int i = 0; i < g[x].size(); i++) {
if (g[x][i] == fa || vis[g[x][i]]) continue;
num += cut(g[x][i], x);
}
return num;
}
void recut(int x, int fa) {
v[x] = 0;
vis[x] = 0;
for (int i = 0; i < g[x].size(); i++) {
if (g[x][i] == fa || vis[g[x][i]]) continue;
recut(g[x][i], x);
}
return ;
}
void dfs(int x, int fa, int cnt, int dist) {
v[x] = 1;
ans = max(cnt, ans);
int num = 0;
if (dist == d[x] && x != 1) {
//cout << num << ' ';
for (int i = 0; i < g[fa].size(); i++) {
if (v[g[fa][i]]) continue;
num = cut(x, fa);
dfs(g[fa][i], fa, cnt + num, dist + 1);
recut(x, fa);
}
}
else {
for (int i = 0; i < g[x].size(); i++) {
if (v[g[x][i]]) continue;
dfs(g[x][i], x, cnt, dist + 1);
}
}
//return ;
}
void dijkstra(int st) {
memset(d, 0x3f, sizeof(d));
q.push((node){d[st], st});
d[st] = 0;
while (!q.empty()) {
int x = q.top().x;
q.pop();
for (int i = 0; i < g[x].size(); i++) {
int y = g[x][i];
if (d[x] + 1 < d[y]) {
d[y] = d[x] + 1;
q.push((node){d[y], y});
}
}
}
return ;
}
int main() {
scanf("%d%d", &n, &m);
while (m--) {
int x, y;
scanf("%d%d", &x, &y);
g[x].push_back(y);
g[y].push_back(x);
}
dijkstra(1);
dfs(1, 0, 0, 0);
printf("%d", n - ans);
return 0;
}
10pts 脑洞有点大