#include #include #include #define min mojmin static vector g[10007]; static int n,m; static int id[10007]; static int min[10007]; static int komp[10007]; static int curid; void dfs(int co, int par, int prvy) { id[co]=curid++; min[co]=id[co]; komp[co] = 1-prvy; for (vector::iterator it=g[co].begin(); it != g[co].end(); it++) { if (*it != par) { if (id[*it] == 0) { dfs(*it, co, 0); if (min[*it] >= id[co]) { komp[co]++; } if (min[co] > min[*it]) { min[co]=min[*it]; } } else { if (min[co] > id[*it]) { min[co]=id[*it]; } } } } } int main() { int i, a,b,pockomp,j; while (1) { scanf("%d %d", &n, &m); if (n == 0 && m == 0) { break; } for (i = 0; i < n; i++) { g[i].clear(); } for (i = 0; i < m; i++) { scanf("%d %d", &a, &b); if (a==b) continue; g[a].push_back(b); g[b].push_back(a); } memset(id, 0, n*sizeof(id[0])); /* for (i = 0; i < n; i++) { for (j = 0; j < g[i].size(); j++) { printf("%d ", g[i][j]); } printf("\n"); } printf("\n");*/ curid=1; pockomp=0; for (i = 0; i < n; i++) { if (id[i] == 0) { pockomp++; dfs(i,-1,1); } } /* printf("pockomp=%d\n", pockomp); for (i = 0; i < n; i++) { printf("%d ", komp[i]); } printf("\n");*/ int amax=-1000000; for (i = 0; i < n; i++) { if (komp[i] > amax) { amax=komp[i]; } } printf("%d\n", pockomp-1+amax); } return 0; }