#include <bits/stdc++.h>
using namespace std;
int n, m;
char s[2005][2005];
int num[2005][2005], ind;
int q[4000005], head, tail, in[4000005], fa[4000005];
int dep[4000005], c[4000005];
bool cmp(int x, int y) { return dep[x] > dep[y]; }
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i) scanf("%s", s[i]);
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j) num[i][j] = ind++;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j) switch (s[i][j]) {
        case '^':
          fa[num[i][j]] = num[i - 1][j];
          ++in[num[i - 1][j]];
          break;
        case '<':
          fa[num[i][j]] = num[i][j - 1];
          ++in[num[i][j - 1]];
          break;
        case '>':
          fa[num[i][j]] = num[i][j + 1];
          ++in[num[i][j + 1]];
          break;
        case 'v':
          fa[num[i][j]] = num[i + 1][j];
          ++in[num[i + 1][j]];
          break;
      }
  head = 0;
  for (int i = 0; i < ind; ++i)
    if (!in[i]) q[tail++] = i;
  while (head < tail) {
    int x = q[head++];
    if (fa[x])
      if (!--in[fa[x]]) q[tail++] = fa[x];
  }
  if (tail < ind) {
    printf("-1\n");
    return 0;
  }
  for (int i = 0; i < ind; ++i) c[i] = i;
  for (int i = tail - 1; i >= 0; --i)
    if (fa[q[i]]) dep[q[i]] = dep[fa[q[i]]] + 1;
  sort(c, c + ind, cmp);
  int ans1 = 0, ans2 = 1, ans = 0;
  for (;; ++ans2) {
    bool ok = 1;
    int i = c[ans1], j = c[ans2];
    ans = 0;
    for (; fa[i] && fa[j]; i = fa[i], j = fa[j]) {
      if (i == j && fa[i] > 0) ok = 0;
      ans += 2;
    }
    for (; fa[i]; i = fa[i]) ++ans;
    for (; fa[j]; j = fa[j]) ++ans;
    if (ok) break;
  }
  printf("%d\n", ans);
  return 0;
}
