#include <bits/stdc++.h>
#define rg register
#define int long long
#define il inline
#define N 5005
#define M 20005
using namespace std;
struct aa{
int a,b;
};
int n,m,dfn[N],be[N],ans,sum[N],low[N],tim,cnt,co[N],st[N],top,vis[N];
bool bri[M];
vector<aa> v;
vector<int> h[N];
il void cun(int a, int b){
v.push_back({a,b});
h[a].push_back(v.size()-1);
}
il bool cmp(aa a, aa b){
if(a.a==b.a) return a.b<b.b;
return a.a<b.a;
}
il void tarjan(int x,int in){
dfn[x]=low[x]=++tim;
st[++top]=x;
for(rg int i = 0; i < h[x].size(); i++ ){
int j=h[x][i],y=v[j].b;
if(!dfn[y]){
tarjan(y,j);
low[x]=min(low[x],low[y]);
if(low[y]>dfn[x]){
bri[i]=bri[i^1]=1;
}
}
else if(j!=(in^1)) low[x]=min(low[x],dfn[y]);
}
if(dfn[x]==low[x]){
int y;
cnt++;
do{
y=st[top--];
co[cnt]++;
be[y]=cnt;
}
while(y!=x);
}
}
signed main(){
scanf("%lld%lld",&n,&m);
for(rg int i = 0; i < m; i++ ){
int a,b;
scanf("%lld%lld",&a,&b);
cun(a,b);
cun(b,a);
}
tarjan(1,0);
for(rg int i = 0;i < m; i++ ){
if(be[v[i].a]!=be[v[i].b]){
sum[be[v[i].a]]++, sum[be[v[i].b]]++;
}
}
for(int i = 1; i <= cnt; i++ ) if(sum[i]==1) ans++;
printf("%lld",(ans+1)/2);
return 0;
}
qwq