#include <bits/stdc++.h>
using namespace std;
const double PI = 2 * acos(0.0);
void run() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr), cout.tie(nullptr);
}
const int M = 2e5;
unsigned long long ans = 0, mod = 998244353, cnt = 0, cur;
long long binpow(long long a, long long b, long long m = mod) {
  a %= m;
  long long res = 1;
  while (b) {
    if (b & 1) res = res * a % m;
    a = a * a % m;
    b >>= 1;
  }
  return res % m;
}
int main() {
  run();
  int n, m;
  cin >> n >> m;
  string a, b;
  cin >> a >> b;
  while (((int)((a).size())) != ((int)((b).size()))) {
    if (((int)((a).size())) > ((int)((b).size())))
      b = '0' + b, m++;
    else
      a = '0' + a, n++;
  }
  for (int i = 0; i < m; i++) {
    cnt += (b[i] == '1');
    if (((int)((a).size())) > i && a[i] == '1') {
      cnt %= mod;
      cur = binpow(2, m - i - 1) * cnt;
      cur %= mod;
      ans += cur;
      ans %= mod;
    }
    ans %= mod;
  }
  cout << ans;
}
