#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
#define in 1000000007
int h,w;
char ch[105][105];
int ok=0;
struct mapa
{
    char x;
    int sum;
    mapa(char m,int n)
    {
        x=m;
        sum=n;
    }
    bool operator <(const mapa &a)const
    {
        return sum<a.sum;
    }
};
int sum[27];
priority_queue<mapa >pq;
int book[105][105];
bool dfs()
{
    memset(book,0,sizeof(book));
    int p=0,q=0;
    int i,j;
    if(h%2==1) p=1;
    if(w%2==1) q=1;
    for(i=0;i<h;i++){
        if(p&&i==h/2) break;
       for(j=0;j<w;j++)
       {
           if(q&&j==w/2) break;
        if(book[i][j]) continue;
        else
        {
            book[i][j]=1;
            int t=1;
            if(!book[i][w-1-j])
            {
                t++;
                book[i][w-1-j]=1;
            }
            if(!book[h-1-i][j])
            {
                t++;
                book[h-1-i][j]=1;
            }
            if(!book[h-1-i][w-1-j])
            {
                t++;
                book[h-1-i][w-1-j]=1;
            }
           mapa a=pq.top();pq.pop();
           if(a.sum<t)
           {
               ok=1;
               return false;
           }
           a.sum=a.sum-t;
           if(a.sum)
              pq.push(a);
        }
       }
       }
       if(p)
       {
           for(int k=0;k<w;k++)
           {
               if(q&&k==w/2) break;
               if(book[i][k]) continue;
               book[i][k]=1;
            int t=1;
            if(!book[i][w-1-k])
            {
                t++;
                book[i][w-1-k]=1;
            }
           mapa a=pq.top();pq.pop();
           if(a.sum<t)
           {
               ok=1;
               return false;
           }
           a.sum=a.sum-t;
           if(a.sum)
              pq.push(a);
        }
       }
       if(q)
       {
           for(int k=0;k<h;k++)
           {
               if(book[k][j]) continue;
               book[k][j]=1;
            int t=1;
            if(!book[h-1-k][j])
            {
                t++;
                book[h-1-k][j]=1;
            }
           mapa a=pq.top();pq.pop();
           if(a.sum<t)
           {
               ok=1;
               return false;
           }
           a.sum=a.sum-t;
           if(a.sum)
              pq.push(a);
        }
       }
       return true;
}
int main()
{
    cin>>h>>w;
    for(int i=0;i<h;i++)
         for(int j=0;j<w;j++)
             cin>>ch[i][j];
             memset(sum,0,sizeof(sum));
    for(int i=0;i<h;i++)
         for(int j=0;j<w;j++)
            sum[ch[i][j]-'a']++;
        for(int i=0;i<27;i++)
            if(sum[i])
            {
                char t=i+'a';
                pq.push(mapa(t,sum[i]));
            }
            if(h==1||w==1)
        {
            int flag=0;
            for(int i=0;i<27;i++)
                if(sum[i]%2!=0) flag++;
            if(flag>1) cout<<"No"<<endl;
            else
                cout<<"Yes"<<endl;
        }
        else{
            if(dfs())
               cout<<"Yes"<<endl;
               else
                 cout<<"No"<<endl;
        }

    return 0;
}


Measured memory_bytes: 256