#include <bits/stdc++.h>
using namespace std;
long long int powmod(long long int a, int b, int n) {
  long long int rm = 1;
  while (b) {
    if (b % 2) {
      rm = (rm * a) % n;
    }
    a = (a * a) % n;
    b /= 2;
  }
  return rm;
}
string grid[2010];
int n, m, state[2010][2010] = {0}, dp[2010][2010];
bool cycle = false;
void dfs(int r, int c) {
  if (state[r][c] == 1) return;
  if (state[r][c] == 2) {
    cycle = true;
    return;
  }
  state[r][c] = 2;
  switch (grid[r][c - 1]) {
    case '#':
      dp[r][c] = 0;
      break;
    case '^':
      dfs(r - 1, c);
      dp[r][c] = dp[r - 1][c] + 1;
      break;
    case 'v':
      dfs(r + 1, c);
      dp[r][c] = dp[r + 1][c] + 1;
      break;
    case '<':
      dfs(r, c - 1);
      dp[r][c] = dp[r][c - 1] + 1;
      break;
    case '>':
      dfs(r, c + 1);
      dp[r][c] = dp[r][c + 1] + 1;
  }
  state[r][c] = 1;
}
void remove(int r, int c) {
  if (grid[r][c - 1] == '#') return;
  switch (grid[r][c - 1]) {
    case '^':
      remove(r - 1, c);
      break;
    case 'v':
      remove(r + 1, c);
      break;
    case '<':
      remove(r, c - 1);
      break;
    case '>':
      remove(r, c + 1);
      break;
  }
  grid[r][c - 1] = '#';
}
int main() {
  int tr, tj;
  scanf("%d", &n);
  ;
  scanf("%d", &m);
  ;
  for (int r = int(1); r <= (int)n; r++) cin >> grid[r];
  int mxlength = -1, ct = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (!state[i][j]) {
        dfs(i, j);
        if (cycle) {
          cout << "-1\n";
          return 0;
        }
      }
      if (dp[i][j] > mxlength) {
        mxlength = dp[i][j];
        tr = i;
        tj = j;
      }
    }
  }
  remove(tr, tj);
  memset(state, 0, sizeof(state));
  ;
  memset(dp, 0, sizeof(dp));
  ;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (!state[i][j]) {
        dfs(i, j);
      }
      if (dp[i][j] == mxlength) {
        cout << 2 * mxlength << endl;
        return 0;
      }
    }
  }
  cout << max(0, 2 * mxlength - 1) << endl;
  return 0;
}
