#include <bits/stdc++.h>
using namespace std;
char mapa[2005][2005];
int N, M;
int vis[2005][2005];
int DP[2005][2005];
int chosto;
int maxi;
int colores[2005][2005];
int cont;
bool ciclo;
int color;
int busca(int y, int x) {
  if (mapa[y][x] == '#') {
    vis[y][x] = 2;
    colores[y][x] = chosto;
    return DP[y][x] = 0;
  }
  if (vis[y][x] == 2) {
    chosto = colores[y][x];
    return DP[y][x];
  }
  if (vis[y][x] == 1) {
    ciclo = 1;
    return 0;
  }
  vis[y][x] = 1;
  if (mapa[y][x] == '^') {
    DP[y][x] = busca(y - 1, x) + 1;
  }
  if (mapa[y][x] == '<') {
    DP[y][x] = busca(y, x - 1) + 1;
  }
  if (mapa[y][x] == '>') {
    DP[y][x] = busca(y, x + 1) + 1;
  }
  if (mapa[y][x] == 'v') {
    DP[y][x] = busca(y + 1, x) + 1;
  }
  vis[y][x] = 2;
  colores[y][x] = chosto;
  return DP[y][x];
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= M; j++) {
      scanf(" %c", &mapa[i][j]);
      if (mapa[i][j] != '#') cont++;
    }
  }
  if (cont < 2) {
    printf("0\n");
  } else {
    cont = 1;
    for (int i = 1; i <= N; i++) {
      for (int j = 1; j <= M; j++) {
        if (vis[i][j] == 0 && mapa[i][j] != '#') {
          chosto = cont;
          busca(i, j);
          if (ciclo) {
            printf("-1\n");
            return 0;
          }
          cont++;
          if (maxi < busca(i, j)) {
            maxi = busca(i, j);
            color = chosto;
          }
        }
      }
    }
    for (int i = 1; i <= N; i++) {
      for (int j = 1; j <= M; j++) {
        if (mapa[i][j] != '#') {
          if (maxi == busca(i, j) && colores[i][j] != color) {
            printf("%d\n", maxi * 2);
            return 0;
          }
        }
      }
    }
    printf("%d\n", maxi * 2 - 1);
  }
  return 0;
}
