#include <bits/stdc++.h>
using namespace std;
const int inf = (int)1.01e9;
const double eps = 1e-9;
const int maxn = 110;
long long d[maxn][maxn];
int X[maxn], Y[maxn], want[maxn];
int k;
inline int inside(int x, int l, int r, int l2, int r2) {
  if (l <= x && x <= r) return 2;
  if (l2 <= x && x <= r2) return 1;
  return 0;
}
inline bool ok(int l, int r, int l2, int r2) {
  for (int i = 0; (i) < (k); ++i) {
    int tx = inside(X[i], l, r, l2, r2);
    int ty = inside(Y[i], l, r, l2, r2);
    if (want[i] == 1) {
      if (!(tx < ty || (tx == ty && (tx == 2 || ty == 0)))) return false;
    }
    if (want[i] == 2) {
      if (!(tx <= ty)) return false;
    }
    if (want[i] == 3) {
      if (tx != ty) return false;
    }
    if (want[i] == 4) {
      if (!(tx >= ty)) return false;
    }
    if (want[i] == 5) {
      if (!(tx > ty || (tx == ty && (ty == 2 || tx == 0)))) return false;
    }
  }
  return true;
}
int main() {
  int n;
  scanf("%d%d", &n, &k);
  for (int i = 0; (i) < (k); ++i) {
    char s[3];
    scanf("%d%s%d", &X[i], s, &Y[i]);
    --X[i], --Y[i];
    if (s[0] == '<') {
      if (s[1] == '=')
        want[i] = 2;
      else
        want[i] = 1;
    } else if (s[0] == '=') {
      want[i] = 3;
    } else if (s[0] == '>') {
      if (s[1] == '=')
        want[i] = 4;
      else
        want[i] = 5;
    }
  }
  int N = 2 * n;
  for (int i = 0; (i) < (N - 1); ++i)
    if (ok(-1, -1, i, i + 1)) d[i][i + 1] = 1;
  for (int l = N - 1; l >= 0; --l)
    for (int r = l + 1; r < N; r += 2) {
      if (l >= 2 && ok(l, r, l - 2, r)) d[l - 2][r] += d[l][r];
      if (l >= 1 && r <= N - 2 && ok(l, r, l - 1, r + 1))
        d[l - 1][r + 1] += d[l][r];
      if (r <= N - 3 && ok(l, r, l, r + 2)) d[l][r + 2] += d[l][r];
    }
  printf("%I64d\n", d[0][N - 1]);
  return 0;
}
