#include <bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define DEBUG 1
#ifdef DEBUG
#define OUT(x) cerr << (#x) << '=' << (x) << endl
#define OUT2(c) cerr << (#c) << " = {"; for (auto it = (c).begin(); it != (c).end(); ++it) cerr << (it == (c).begin() ? "" : ", ") << *it; cerr << "}" << endl;
#else
#define OUT(x)
#define OUT2(c)
#endif
const int MAXN = 1e5 + 5;
int n, m, ans;
vector<int> adj[MAXN];
int depth[MAXN];
bool visited[MAXN];
pair<int, int> best;
void dfs(int u, int p, int d){
visited[u] = 1;
depth[u] = d;
best = max(best, {d, u});
for(int v : adj[u]){
if(v == p) continue;
dfs(v, u, d + 1);
}
}
void solve() {
cin >> n >> m;
for(int i = 0; i < m; i++){
int a, b; cin >> a >> b; a--, b--;
adj[a].push_back(b);
adj[b].push_back(a);
}
int ans = 0;
for(int i = 0; i < n; i++){
if(visited[i]) continue;
best = {-1, -1};
dfs(i, -1, 1);
dfs(best.second, -1, 1);
ans += best.first;
}
cout << ans << '\n';
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int tt; tt = 1;
while (tt--) {
solve();
}
}