#include <bits/stdc++.h>
using namespace std;
const int maxn = 2000 + 10;
const int maxm = 100000 + 10;
const int inf = 0x3f3f3f3f;
char maze[maxn][maxn];
bool vis[maxn][maxn];
int d[maxn][maxn], num[maxn][maxn];
int gx[] = {1, 0, 0, -1}, gy[] = {0, -1, 1, 0};
char ch[] = {'^', '>', '<', 'v'};
int n, m;
int bfs(int x, int y) {
  queue<int> qx, qy;
  vis[x][y] = true;
  qx.push(x);
  qy.push(y);
  d[x][y] = 1;
  int maxv = 0;
  while (!qx.empty()) {
    int tx = qx.front(), ty = qy.front();
    qx.pop();
    qy.pop();
    for (int i = 0; i < 4; i++) {
      int txx = tx + gx[i], tyy = ty + gy[i];
      if (txx <= 0 || txx > n || tyy <= 0 || tyy > m) continue;
      if (maze[txx][tyy] != ch[i]) continue;
      if (vis[txx][tyy]) continue;
      d[txx][tyy] = d[tx][ty] + 1;
      qx.push(txx);
      qy.push(tyy);
      vis[txx][tyy] = true;
      maxv = max(d[txx][tyy], maxv);
    }
  }
  return maxv;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%s", maze[i] + 1);
  memset(d, 0, sizeof(d));
  memset(num, 0, sizeof(num));
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (maze[i][j] == '#') {
        vis[i][j] = true;
        num[i][j] = inf;
        for (int k = 0; k < 4; k++) {
          int x = i + gx[k], y = j + gy[k];
          if (maze[x][y] != ch[k]) continue;
          if (vis[x][y]) continue;
          if (x <= 0 || x > n || y <= 0 || y > m) continue;
          int tmp = bfs(x, y);
          if (tmp > d[i][j]) {
            num[i][j] = 1;
            d[i][j] = tmp;
          } else if (tmp == d[i][j])
            num[i][j]++;
        }
      }
  bool flag = false;
  int ans = 0, cnt = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (!vis[i][j]) {
        flag = true;
      } else if (maze[i][j] == '#') {
        if (d[i][j] == ans)
          cnt += num[i][j];
        else if (d[i][j] > ans) {
          ans = d[i][j];
          cnt = num[i][j];
        }
      }
  if (flag)
    printf("-1\n");
  else if (cnt == 1)
    printf("%d\n", ans + ans - 1);
  else
    printf("%d\n", ans + ans);
  return 0;
}
