#include<bits/stdc++.h>
#define LL long long
#define Ms(a,b) memset(a,b,sizeof a)
#define db(x) cerr<<#x<<"="<<x<<endl;
#define db2(x,y) cerr<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl;
#define db3(x,y,z) cerr<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl;
using namespace std;
int rd(){
    int res=0,c,f=0;
    while(!isdigit(c=getchar()))f=c=='-';
    do res=(res<<1)+(res<<3)+(c^48);
    while(isdigit(c=getchar()));
    return f?-res:res;
}
int n,m,cnt[1<<20];
LL a[1<<20];
char s[30];
int main(){
    n=rd(),m=rd();
    for(int i=1;i<=n;i++){
        scanf("%s",s+1);
        int v=0;
        for(int j=1;j<=m;j++)v=v<<1|(s[j]-'0');
        a[v]++;
    } 
    for(int l=1;l<1<<m;l<<=1)
        for(int i=0;i<1<<m;i+=l<<1)
            for(int j=i;j<i+l;j++){
                LL x=a[j],y=a[j+l];
                a[j]=x+y,a[j+l]=x-y;
            }
    for(int i=0;i<1<<m;i++)a[i]*=a[i];
    for(int l=1;l<1<<m;l<<=1)
        for(int i=0;i<1<<m;i+=l<<1)
            for(int j=i;j<i+l;j++){
                LL x=a[j],y=a[j+l];
                a[j]=x+y,a[j+l]=x-y;
            }
    int t=1<<m;
    LL res=0;
    for(int i=1;i<1<<m;i++){
        cnt[i]=cnt[i&(i-1)]^1;
        if(cnt[i])res+=a[i]/t;
    }
    printf("%lld\n",res/2);
    return 0;
}


#define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
using namespace std;

int main(){
  long long N,M,Even=0,Odd=0,ans=0;
  cin >> N >> M;
  
  string S;
  vector<long long> sum(N);
  
  
  for(long long i=0;i<N;i++){
    cin >> S;
    
    for(long long j=0;j<M;j++){
      if(S[j]=='1'){
        sum[i]++;
      }
    }
  }
  
  for(long long i=0;i<N;i++){
    if(sum[i]%2==0){
      Even++;
    }
    else
      Odd++;
  }
  
  ans = Even*Odd;
  cout << ans << endl;
  
  
}