#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 5;
const long long Linf = 1e18 + 5;
template <class T>
inline void umax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline void umin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
template <class T>
inline T lcm(T a, T b) {
  return a * b / __gcd(a, b);
}
int read() {
  int res = 0;
  int neg;
  while (true) {
    char ch = getchar();
    if ((ch >= '0' && ch <= '9') || ch == '-') {
      if (ch == '-')
        neg = -1;
      else
        neg = 1, res = ch - '0';
      break;
    }
  }
  while (true) {
    char ch = getchar();
    if (ch >= '0' && ch <= '9')
      res *= 10, res += ch - '0';
    else
      break;
  }
  return res * neg;
}
void print(int x) {
  if (x == 0) {
    putchar('0');
    putchar('\n');
    return;
  }
  static char buf[20];
  int nn = 0;
  if (x < 0) putchar('-'), x *= -1;
  while (x) {
    buf[++nn] = x % 10 + '0';
    x /= 10;
  }
  for (int(i) = (nn); (i) >= int(1); (i)--) putchar(buf[i]);
  putchar('\n');
}
const int MAXN = 1111;
const long long mod = 1000000000;
int ar[MAXN];
long long F[MAXN];
int main() {
  F[0] = 1;
  F[1] = 1;
  for (int(i) = (2); (i) < int(MAXN); (i)++) F[i] = (F[i - 1] + F[i - 2]) % mod;
  int n = read();
  int m = read();
  for (int(i) = (1); (i) <= int(n); (i)++) ar[i] = read();
  for (int(i) = (1); (i) <= int(m); (i)++) {
    int t = read();
    if (t == 1) {
      int x = read();
      int v = read();
      ar[x] = v;
    } else {
      int l = read();
      int r = read();
      int k = 0;
      long long res = 0LL;
      for (int(i) = (l); (i) <= int(r); (i)++) {
        res += F[k++] * ar[i] % mod;
        res %= mod;
      }
      cout << res << endl;
    }
  }
  return 0;
}
