#include <bits/stdc++.h>

using i32 = std::int32_t;
using u32 = std::uint32_t;
using i64 = std::int64_t;
using u64 = std::uint64_t;
using i128 = __int128_t;
using u128 = __uint128_t;
using isize = std::ptrdiff_t;
using usize = std::size_t;

class rep {
    struct Iter {
        usize itr;
        constexpr Iter(const usize pos) noexcept: itr(pos) { }
        constexpr void operator ++ () noexcept { ++itr; }
        constexpr bool operator != (const Iter& other) const noexcept { return itr != other.itr; }
        constexpr usize operator * () const noexcept { return itr; }
    };
    const Iter first, last;
public:
    explicit constexpr rep(const usize first, const usize last) noexcept: first(first), last(std::max(first, last)) { }
    constexpr Iter begin() const noexcept { return first; }
    constexpr Iter end() const noexcept { return last; }
};

template <class T>
using Vec = std::vector<T>;

void A_main() {
    // S_i, S_j の異なる bit が奇数個
    // mod 2 において
    // popcount(S_i xor S_j)
    //  = popcount(S_i) + popcount(S_j) - 2 * popcount(S_i and S_j)
    //  = popcount(S_i) + popcount(S_j)
    usize N, M;
    std::cin >> N >> M;
    u64 even = 0, odd = 0;
    for (auto i: rep(0, N)) {
        usize sum = 0;
        for (auto j: rep(0, M)) {
            char c;
            std::cin >> c;
            sum += c - '0';
        }
        (sum % 2 == 0 ? even : odd) += 1;
    }
    std::cout << even * odd << '\n';
    return;
}

int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    A_main();
    return 0;
}

#include<bits/stdc++.h>
 
using namespace std;
int mod=1000000007;
 

int main()
{
	int m,h;
	cin>>m>>h;
	
	if(h%m==0)
	cout<<"Yes"<<endl;
	else
	cout<<"No"<<endl;
	
	
	return 0;
}

/* common mistakes:

	long long
	pass constants as &
	
*/







