#include <iostream>
#include <vector>
using namespace std;

vector<vector<int> >graph;
vector<bool> visited;

int max_distance, x;
void DFS ( int node, int parent, int distance ){
    
    if ( distance > max_distance ){
        max_distance = distance;
        x = node;
    }
    
    for ( auto neighbour : graph[node] ){
        if ( neighbour != parent )
            DFS(neighbour, node, distance + 1);
    }
}

int main()
{
    int n, m;
    cin >> n >> m;
    graph.resize(n);
    
    for ( int i = 0; i < m; i++ ){
        int u, v;
        cin >> u >> v;
        graph[u].emplace_back(v);
        graph[v].emplace_back(u);
    }
    
    max_distance = -1;
    DFS(0, -1, 0);
    int y = x;
    max_distance = -1;
    DFS(y, -1, 0);
    int z = x;
    
    int diameter = max_distance;
    cout << diameter << endl;
    return 0;
}
