#include <bits/stdc++.h>
using namespace std;
template <class T>
int size(const T &x) {
  return x.size();
}
const int INF = 2147483647;
vector<pair<int, pair<int, int> > > signs;
vector<int> cur(100, -1);
bool order(int a, int op, int b) {
  if (op == 0) return a == b;
  if (op == 1) return a < b;
  if (op == 2) return a <= b;
  if (op == 3) return a > b;
  if (op == 4) return a >= b;
  assert(false);
}
int n;
bool ok(int num, int l, int r, int bl, int br) {
  if (l < 0 || r < 0 || l >= 2 * n || r >= 2 * n) return false;
  for (__typeof(0) i = (0); i < (size(signs)); ++i) {
    int op = signs[i].first, a = signs[i].second.first,
        b = signs[i].second.second;
    int na = a == l || a == r ? num : bl <= a && a <= br ? 100000 : -1000000;
    int nb = b == l || b == r ? num : bl <= b && b <= br ? 100000 : -1000000;
    if (a == l || a == r || b == l || b == r) {
      if (!order(na, op, nb)) {
        return false;
      }
    }
  }
  return true;
}
long long mem[100][100];
long long dp(int l, int r) {
  assert(l <= r);
  assert(0 <= l && r < 2 * n);
  if (r - l + 1 == 2 * n) {
    return 1;
  }
  if (mem[l][r] != -1) return mem[l][r];
  int done = (r - l + 1) / 2, now = n - done;
  long long res = 0;
  if (ok(now, l - 2, l - 1, l, r)) {
    res += dp(l - 2, r);
  }
  if (ok(now, l - 1, r + 1, l, r)) {
    res += dp(l - 1, r + 1);
  }
  if (ok(now, r + 1, r + 2, l, r)) {
    res += dp(l, r + 2);
  }
  return mem[l][r] = res;
}
int main() {
  memset(mem, -1, sizeof(mem));
  int k;
  cin >> n >> k;
  for (__typeof(0) i = (0); i < (k); ++i) {
    int a, b;
    string sign;
    cin >> a >> sign >> b;
    a--, b--;
    signs.push_back(make_pair(sign == "="    ? 0
                              : sign == "<"  ? 1
                              : sign == "<=" ? 2
                              : sign == ">"  ? 3
                              : sign == ">=" ? 4
                                             : -1,
                              pair<int, int>(a, b)));
  }
  long long res = 0;
  for (int mid = 0; mid + 1 < 2 * n; mid++) {
    if (ok(n, mid, mid + 1, -1, -1)) {
      cur[mid] = n;
      cur[mid + 1] = n;
      res += dp(mid, mid + 1);
      cur[mid] = -1;
      cur[mid + 1] = -1;
    }
  }
  cout << res << endl;
  return 0;
}
