#include <bits/stdc++.h>
#define int long long
using namespace std;
int read()
{
int res = 0,f = 1;
char ch = getchar();
while (ch<'0'||ch>'9') f = (ch=='-'?-f:f),ch = getchar();
while (ch>='0'&&ch<='9') res = (res<<3)+(res<<1)+(ch^48),ch = getchar();
return res*f;
}
void write(int x)
{
if (x<0) putchar(x),x=-x;
if (x>9) write(x/10);
putchar(x%10+'0');
}
void writech(int x,char ch){write(x),putchar(ch);}
const int N = 5005;
int n,m;
vector<pair<int,int> > a[N];
int dfn[N],low[N],dfncnt;
int s[N],tp;
int bcc,bc[N];
int du[N];
void tarjan(int x,int bid)
{
dfn[x]=low[x]=++dfncnt;
for (int i = 0; i < a[x].size(); i++)
{
int y = a[x][i].first,bb = a[x][i].second;
if (bb==bid) continue;
if (!dfn[y]) tarjan(y,bb),low[x]=min(low[x],low[y]);
else low[x]=min(low[x],dfn[y]);
}
if (dfn[x]==low[x])
{
++bcc;
while (s[tp]!=x) bc[s[tp--]]=bcc;
bc[s[tp--]]=bcc;
}
}
signed main()
{
n=read(),m=read();
for (int i = 1; i <= m; i++)
{
int x=read(),y=read();
a[x].push_back({y,i});
a[y].push_back({x,i});
}
for (int i = 1; i <= n; i++) if (!dfn[i]) tarjan(i,0);
for (int i = 1; i <= n; i++)
{
for (int j = 0; j < a[i].size(); j++)
{
int x = bc[i],y = bc[a[i][j].first];
if (x==y) continue;
du[x]++,du[y]++;
}
}
int ans = 0;
for (int i = 1; i <= bcc; i++) ans+=du[i]==1;
write((ans+1)/2);
return 0;
}