#include <bits/stdc++.h>
using namespace std;
long long int powmod(long long int a, int b, int n) {
  long long int rm = 1;
  while (b) {
    if (b % 2) {
      rm = (rm * a) % n;
    }
    a = (a * a) % n;
    b /= 2;
  }
  return rm;
}
long long int seg[4 * int(1e5 + 10)][3] = {0}, h[int(1e5 + 10)],
                                d[int(1e5 + 10)], dis[4 * int(1e5 + 10)] = {0};
int n, Q, a, b;
void insert(int n, int it, int f) {
  if (it == f) {
    seg[n][0] = seg[n][1] = h[f];
    dis[n] = 0;
    return;
  }
  int m = (it + f) / 2;
  insert(n * 2, it, m);
  insert(n * 2 + 1, m + 1, f);
  seg[n][0] = max(seg[n * 2][0], dis[n * 2] + seg[n * 2 + 1][0] + d[m]);
  seg[n][1] = max(seg[n * 2 + 1][1], dis[n * 2 + 1] + d[m] + seg[n * 2][1]);
  seg[n][2] = max(seg[n * 2][2], seg[n * 2 + 1][2]);
  seg[n][2] = max(seg[n][2], seg[n * 2][1] + d[m] + seg[n * 2 + 1][0]);
  dis[n] = dis[n * 2] + dis[n * 2 + 1] + d[m];
}
pair<pair<long long int, long long int>, pair<long long int, long long int> >
query(int n, int it, int f, int q1, int q2) {
  if (it == q1 & f == q2) {
    return make_pair(make_pair(seg[n][0], seg[n][1]),
                     make_pair(seg[n][2], dis[n]));
  }
  int m = (it + f) / 2;
  if (q2 <= m)
    return query(n * 2, it, m, q1, q2);
  else if (q1 > m)
    return query(n * 2 + 1, m + 1, f, q1, q2);
  else {
    pair<pair<long long int, long long int>,
         pair<long long int, long long int> >
        tmp1 = query(n * 2, it, m, q1, m);
    pair<pair<long long int, long long int>,
         pair<long long int, long long int> >
        tmp2 = query(n * 2 + 1, m + 1, f, m + 1, q2);
    pair<pair<long long int, long long int>,
         pair<long long int, long long int> >
        ftmp;
    ftmp.first.first =
        max(tmp1.first.first, tmp1.second.second + d[m] + tmp2.first.first);
    ftmp.first.second =
        max(tmp2.first.second, tmp2.second.second + d[m] + tmp1.first.second);
    ftmp.second.first = max(tmp1.second.first, tmp2.second.first);
    ftmp.second.first =
        max(ftmp.second.first, d[m] + tmp1.first.second + tmp2.first.first);
    ftmp.second.second = tmp1.second.second + d[m] + tmp2.second.second;
    return ftmp;
  }
}
int main() {
  cin >> n >> Q;
  for (int i = int(1); i <= (int)n; i++) scanf("%d", &d[i]);
  ;
  for (int i = int(1); i <= (int)n; i++) {
    scanf("%d", &h[i]);
    ;
    h[i] *= 2;
  }
  insert(1, 1, n);
  while (Q--) {
    cin >> a >> b;
    if (b >= a) {
      int q11 = 1, q12 = a - 1, q21 = b + 1, q22 = n;
      pair<pair<long long int, long long int>,
           pair<long long int, long long int> >
          ans1, ans2;
      long long int fans = 0;
      if (q12 >= 1) {
        ans1 = query(1, 1, n, q11, q12);
      }
      if (q21 <= n) {
        ans2 = query(1, 1, n, q21, q22);
      }
      if (q12 >= 1 && q22 <= n) {
        fans = max(ans1.second.first, ans2.second.first);
        fans = max(fans, d[n] + ans2.first.second + ans1.first.first);
      } else if (q12 >= 1 && q22 > n)
        fans = ans1.second.first;
      else if (q12 < 1 && q22 <= n)
        fans = ans2.second.first;
      cout << fans << endl;
    } else {
      pair<pair<long long int, long long int>,
           pair<long long int, long long int> >
          ans = query(1, 1, n, b + 1, a - 1);
      cout << ans.second.first << endl;
    }
  }
  return 0;
}
