#include <bits/stdc++.h>
using namespace std;
const int MAX = 112345;
const int LIM = 2000000;
const int MAXT = 270000;
const int P = 1000000007;
const int INF = (1 << 28);
const double EPS = 1e-6;
const double PI = 3.14159265358979;
int n, m;
vector<int> adj[MAX];
int visitado[MAX];
int profundidade, vertice;
void DFS(int u, int p) {
  visitado[u] = 1;
  if (p > profundidade) {
    profundidade = p;
    vertice = u;
  }
  for (int i = 0; i < (int)adj[u].size(); i++) {
    if (!visitado[adj[u][i]]) DFS(adj[u][i], p + 1);
  }
}
int main(void) {
  int a, b;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < m; i++) {
    scanf("%d %d", &a, &b);
    a--;
    b--;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  profundidade = 0;
  memset(visitado, 0, sizeof(visitado));
  DFS(0, 0);
  profundidade = 0;
  memset(visitado, 0, sizeof(visitado));
  DFS(vertice, 0);
  printf("%d\n", profundidade);
  return 0;
}
