Thanks to Milo for helping me through this. Here is the code that worked for me.
function custom_events_query( $query ) {
if ( $query->is_main_query() && $query->is_archive && !is_admin()&& is_post_type_archive('events') && $query->query_vars['m']!='') {
$query->set( 'post_type', 'events' );
$query->set( 'meta_key', 'event_date' );
$query->set( 'orderby', 'meta_value' );
$query->set( 'order', 'DESC' );
$query->set( 'post_per_page', 10 );
unset($query->query_vars['year']);
unset($query->query_vars['monthnum']);
unset($query->query_vars['day']);
$meta_query = array(
array(
'key' => 'event_date',
'value' => array(date('Y-m-d',strtotime($query->query_vars['m'].'01')),date('Y-m-d',strtotime($query->query_vars['m'].'31'))) ,
'compare' => 'BETWEEN'
)
);
unset($query->query_vars['m']);
$query->set( 'meta_query', $meta_query );
}
return $query;
}
add_filter( 'pre_get_posts', 'custom_events_query' );
All I had to do is unset the query_vars[‘m’]. Since I needed it to construct my meta_query I unset it only after I was done using it i.e just before $query->set( 'meta_query', $meta_query );
I hope this helps someone.