Help me in solving Spread Spree Problem

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

void solve() {
int mod = 998244353;

long long n,m; cin>>n>>m;

if (n<m) swap(n,m);

long long k, ans;
if (n%2 == 1) {
    // only row n/2;
    k = n/2;
    long long row = (k+1);
    if (m-1<=k) {
       // consider all columns
       ans = (row*((m*(m+1)/2)%mod))%mod;
    } else {
        long long left = max((long long)1,(m-k)%mod);
        long long right = min(m,(k+1)%mod);
        
        left--;
        ans = (row * (((right*(right+1))/2)%mod - ((left*(left+1))/2)%mod )%mod)%mod;
    }
} else {
    // row n/2 and (n/2)+1
    k = n/2;
    long long row = k;
    if (m-1<=k) {
       // consider all columns
       ans = (row*((m*(m+1)/2)%mod))%mod;
       row++; // calculate for next row also
       ans = (ans + (row*((m*(m+1)/2)%mod))%mod)%mod;
    } else {
        long long left = max((long long)1,(m-k)%mod);
        long long right = min(m,(k+1)%mod);
        
        left--;
        ans = (row * (((right*(right+1))/2)%mod - ((left*(left+1))/2)%mod )%mod)%mod;
        
        row++; // calculate for next row also
        ans = (ans + (row * (((right*(right+1))/2)%mod - ((left*(left+1))/2)%mod )%mod)%mod)%mod;
    }
}
cout<<ans<<"\n";

}

int main()
{
int t; cin >> t;

while (t--) {

    solve();

}

}

Out of 3 Test cases, the first 2 Test cases are passing.
Can anyone please say why the third Test case is failing?

Submission Link: CodeChef: Practical coding for everyone

Thank you