/*
 *
 *
 */

#include <bits/stdc++.h>

using namespace std;

#define LOG(...) fprintf(stderr, __VA_ARGS__)
//#define LOG(...)
#define FOR(i, a, b) for(int i = (int)(a); i < (int)(b); ++i)
#define RFOR(i, a, b) for(int i = (int)(b - 1); i >= (int)(a); --i)
#define REP(i, n) for(int i = 0; i < (int)(n); ++i)
#define RREP(i, n) for(int i = (int)(n - 1); i >= 0; --i)
#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define EXIST(s, e) ((s).find(e) != (s).end())
#define SORT(c) sort(ALL(c))
#define RSORT(c) sort(RALL(c))
#define SQ(n) (n) * (n)

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<bool> vb;
typedef vector<int> vi;
typedef vector<char> vc;
typedef vector<pii> vpi;
typedef vector<pll> vpl;
typedef vector<ll> vll;
typedef vector<vb> vvb;
typedef vector<vi> vvi;
typedef vector<vc> vvc;
typedef vector<vll> vvll;

int dx[] = {-1, 0, 1, 0};
int dy[] = {0, -1, 0, 1};

int main() {
  string way = "<^>v";

  int h, w;
  cin >> h >> w;
  vvc field(h, vc(w));
  int ox, oy;
  int ix, iy, id;
  REP(y, h){
    REP(x, w){
      char c;
      cin >> c;
      switch (c) {
      case 'G':
        ox = x;
        oy = y;
        break;
      case '<':
      case '^':
      case '>':
      case 'v':
        ix = x;
        iy = y;
        id = way.find(c);
        break;
      }
      field[y][x] = c;
    }
  }

  bool d[h][w][4];
  fill_n((bool *)d, h * w * 4, false);
  set<int> number;
  while(true) {
    if (d[iy][ix][id]) {
      cout << -1 << endl;
      break;
    }
    if (ix == ox && iy == oy) {
      cout << number.size() + 1 << endl;
      break;
    }
    d[iy][ix][id] = true;
    number.insert(iy * w + ix);

    // r turn
    int rd = (id + 1) % 4;
    int rx = ix + dx[rd], ry = iy + dy[rd];
    if (0 <= rx && rx < w && 0 <= ry && ry < h && field[ry][rx] != '#') {
      id = rd;
      ix = rx;
      iy = ry;
      continue;
    }
    // go ahead
    int sx = ix + dx[id], sy = iy + dy[id];
    if (0 <= sx && sx < w && 0 <= sy && sy < h && field[sy][sx] != '#') {
      ix = sx;
      iy = sy;
      continue;
    }
    // l turn
    id = (id + 3) % 4;
  }
}