N,M = map(int,input().split()) S = [list(map(int,input().split())) for _ in range(N)] dp = [0] * (1 << M) def calc(mask): l = [0] * N count = 0 for i in range(N): tmp = 1 for j in range(M): if (mask >> j) & 1 == 0:continue tmp &= S[i][j] l[i] = tmp count += tmp return (l,count) for i in range(M): mask = 1 << i l,count = calc(mask) if count >= (N+1) // 2: dp[mask] = 1 for bit in range(1,1 << M): l,count = calc(bit) for i in range(M): mask = 1 << i if mask & bit:continue num = 0 for j in range(N): num += l[j] & S[j][i] if num >= (count + 1) // 2: dp[bit | mask] += dp[bit] print(dp[-1]) #print(dp)