Loop and Page template : my WP_query don’t take args

What I see is , you are not following WP coding standard.

<?= get_the_title(); ?> 

is not allowed in WP coding standard.

Now you are getting only the post and not as per your args provided, this means you have not reset your main WP Query.

We can write the above code as :

<?php
/*
Template Name: Trends
*/

get_header(); ?>

// Primary loop 
<?php while( have_posts() ) : the_post(); ?>
    <section id="top">
        <div class="intro">
            <? the_title(); ?>
        </div>
        <?php the_content();?>          
<?php endwhile; ?>

<?php 
    // Paramter for getting 2 posts
    $args = array(
        'posts_per_page' => 2,
    );

    $latest = new WP_Query( $args ); ?>
    <?php while( $latest->have_posts() ) : $latest->the_post(); ?>
        <h2><?php the_title(); ?></h2>
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>
</section>

<?php get_footer();