#include <bits/stdc++.h>
void stderr_printf(const char *fmt, ...) {
  va_list ap;
  va_start(ap, fmt);
  vfprintf(stderr, fmt, ap);
  va_end(ap);
}
using namespace std;
struct flist {
  int val;
  int pos;
};
bool bof(flist a, flist b) { return a.val < b.val; }
bool visited[1000005];
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long i, j, k;
  long long n, m;
  cin >> n >> m;
  ;
  long long row[n][2];
  long long col[m][2];
  for (i = 0; i < n; i++) {
    row[i][0] = 0;
    row[i][1] = 0;
    for (j = 0; j < m; j++) {
      if (i == 0) {
        col[j][0] = 0;
        col[j][1] = 0;
      }
      long long cur;
      cin >> cur;
      ;
      row[i][cur]++;
      col[j][cur]++;
    }
  }
  long long ans = n * m;
  for (i = 0; i < n; i++) {
    for (j = 0; j < 2; j++) {
      ans += pow(2LL, row[i][j]) - (row[i][j] + 1LL);
    }
  }
  for (i = 0; i < m; i++) {
    for (j = 0; j < 2; j++) {
      ans += pow(2LL, col[i][j]) - (col[i][j] + 1LL);
    }
  }
  printf("%lld\n", ans);
}
