#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> 
using namespace __gnu_pbds;
using namespace std;
#define F first
#define S second
#define pb push_back
#define powerof2 ()
#define mp make_pair
using ll = long long;
const ll M = 1000000007;
const ll M1= 998244353;
using vl = vector<ll>;
using pll =  pair<ll,ll>;
typedef tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag, tree_order_statistics_node_update> is;

ll power(ll x,ll y){
	if(y==0)
		return 1;
	ll res=power(x,y/2);
	res=(res*res);
	if(y&1)
		res=(res*x);
	return res;
}

ll powermod(ll x,ll y,ll mod){
	if(y==0)
		return 1;
	ll res=powermod(x,y/2,mod);
	res=(res*res)%mod;
	if(y&1)
		res=(res*x)%mod;
	return res;
}
/*int n,m2;char s[101];
char mat[501][501];
map<pair<int,int>,vector<pair<int,int>>> m,m1;

void dfs(int i,int j,int in,pair<int,int> p)
{
	int i1=i,j1=j;
	if(s[in]=='\0')
		return;
	if(s[in]=='L')
		j1--;
	else if(s[in]=='R')
		j1++;
	else if(s[in]=='U')
		i1--;
	else
		i1++;
	if(i1<=0||j1<=0||i1>n||j1>m2||mat[i1][j1]=='#')
        {
        	i1=i;
        	j1=j;
        }
        in++;
        m[p].pb({i1,j1});
        dfs(i1,j1,in,p);
}

void dfs1(int i,int j,int co,set<pair<int,int>> &st,pair<int,int> p){
	if(st.find({i,j})!=st.end())
	{
		m1[p].pb({i,j});
		return;
	}
	//if(co!=0){
	m1[p].pb({i,j});
	st.insert({i,j});
	co++;
	pair<int,int> p1=m[{i,j}][m[{i,j}].size()-1];
	dfs1(p1.F,p1.S,co,st,p);
}*/

void solve(){
	/*int q;
 	scanf("%d%d%d",&n,&m2,&q);
    for(int i=1;i<=n;i++)
    	for(int j=1;j<=m2;j++){
    		scanf("%c",&mat[i][j]);
    	}
     printf("%d\n",1);
     scanf("%s",s);
     int co=0;
     int in=0;
     while(s[in]!='\0'){co++;in++;}

     for(int i=1;i<=n;i++)
     	for(int j=1;j<=m2;j++)
     		if(mat[i][j]=='.')
     		{
     			dfs(i,j,0,{i,j});
     		}
     

     for(int i=1;i<=n;i++)
     	for(int j=1;j<=m2;j++)
     		if(mat[i][j]=='.')
     		{
     			set<pair<int,int>> st;
     			dfs1(i,j,0,st,{i,j});
     		}
    for(auto it=m.begin();it!=m.end();it++)
    {
    	cout<<"("<<it->F.F<<","<<it->F.S<<")-> ";
    	for(int i=0;i<m[{it->F.F,it->F.S}].size();i++)
    	{
    		cout<<"("<<m[{it->F.F,it->F.S}][i].F<<","<<m[{it->F.F,it->F.S}][i].S<<") ";
    	}
    	cout<<endl;
    }
    cout<<endl;
    cout<<endl;
    cout<<endl;
    for(auto it=m1.begin();it!=m1.end();it++)
    {
    	cout<<"("<<it->F.F<<","<<it->F.S<<")-> ";
    	for(int i=0;i<m1[{it->F.F,it->F.S}].size();i++)
    	{
    		cout<<"("<<m1[{it->F.F,it->F.S}][i].F<<","<<m1[{it->F.F,it->F.S}][i].S<<") ";
    	}
    	cout<<endl;
    }
     		//printf("%d\n",1);
    while(q--)
    {
    	int r,c,z;
    	cin>>r>>c>>z;
    	z--;
        int q=z/co;
        int re=z%co;
    	if(q==0)
    	{
    		cout<<m[{r,c}][re].F<<" "<<m[{r,c}][re].S<<"\n";
    	}
    	else if(q<m1[{r,c}].size())
    	{
    		int t=r;
    		r=m1[{r,c}][q].F;
    		c=m1[{t,c}][q].S;
    		//cout<<r<<" "<<c<<endl;
    		cout<<m[{r,c}][re].F<<" "<<m[{r,c}][re].S<<"\n";
    	}
    	else
    	{
      		q-=m1[{r,c}].size()-1;
            q--;
            pair<int,int> p1=m1[{r,c}][m1[{r,c}].size()-1];
            r=p1.F;
            c=p1.S;
            int si=m1[{r,c}].size()-1;
            q=q%si;
            q++;
            int t=r;
    		r=m1[{r,c}][q].F;
    		c=m1[{t,c}][q].S;
    		//cout<<r<<" "<<c<<endl;
    		cout<<m[{r,c}][re].F<<" "<<m[{r,c}][re].S<<"\n";
    	}
    // }*/
    //  int n;
    //  cin>>n;
    //  int a[n],mi=(int)1e9,ma=0;
    //  for(int i=0;i<n;i++)
    //  {
    //  	cin>>a[i];
    //  	mi=min(mi,a[i]);
    //  	ma=max(ma,a[i]);
    //  }
    //   int l=(int)1e9;
    //   for(int i=0;i<n;i++)
    //   {
    //   	if(a[i]==mi)
    //   	{
    //   		for(int j=0;j<n;j++)
    //   		{
    //   			if(a[j]==ma)
    //   			{
    //   				l=min(l,abs(i-j)+1);
    //   			}
    //   		}
    //   	}
    //   }
    //   cout<<l<<endl;

    ll h,w;
    cin>>h>>w;
    if(h==1||w==1)
    	cout<<1<<endl;
    else
    cout<<(h*w+1)/2<<endl;
}
int main(){
	/*#ifndef ONLINE_JUDGE
	    // for getting input from input.txt


	    freopen("input.txt", "r", stdin);
	    // for writing output to output.txt
	    freopen("output.txt", "w", stdout);
	#endif*/

	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    // int t;
    // cin>>t;
    // while(t--)
    solve();
    return 0;
}

Measured memory_bytes: 256