#include <bits/stdc++.h>
using namespace std;
vector<int> a[25];
int w, h, result, d1[4] = {-1, 0, 1, 0}, d2[4] = {0, 1, 0, -1};
void dfs(int y, int x, int amo) {
  int i;
  amo++;
  result = max(amo, result);
  a[y][x] = 0;
  for (i = 0; i < 4; i++)
    if (0 <= x + d1[i] && x + d1[i] < w && 0 <= y + d2[i] && y + d2[i] < h)
      if (a[y + d2[i]][x + d1[i]] == 1) dfs(y + d2[i], x + d1[i], amo);
  a[y][x] = 1;
}
int main() {
  int i, j, tmp;
  while (cin >> w >> h, w) {
    result = 0;
    for (i = 0; i < h; i++) {
      a[i].clear();
      for (j = 0; j < w; j++) {
        cin >> tmp;
        a[i].push_back(tmp);
      }
    }
    for (i = 0; i < h; i++)
      for (j = 0; j < w; j++)
        if (a[i][j] == 1) dfs(i, j, 0);
    cout << result << endl;
  }
  return 0;
}
