#include <bits/stdc++.h>
using namespace std;
string in;
bool vis[120][2][60][240];
int d[2] = {1, -1};
struct Node {
  int pos, dir, cnt, dis;
  Node(int _pos = 0, int _dir = 0, int _cnt = 0, int _dis = 0)
      : pos(_pos), dir(_dir), cnt(_cnt), dis(_dis){};
};
int main() {
  cin >> in;
  int limit;
  cin >> limit;
  int len = in.length();
  vis[0][0][0][len] = 1;
  queue<Node> Q;
  Q.push(Node(0, 0, 0, len));
  while (!Q.empty()) {
    Node f = Q.front();
    Q.pop();
    if (f.pos == len) continue;
    int pos = f.pos;
    if (in[pos] == 'F') {
      if (!vis[f.pos + 1][f.dir][f.cnt][f.dis + d[f.dir]]) {
        vis[f.pos + 1][f.dir][f.cnt][f.dis + d[f.dir]] = 1;
        Q.push(Node(f.pos + 1, f.dir, f.cnt, f.dis + d[f.dir]));
      }
      if (f.cnt + 1 <= limit && !vis[f.pos + 1][1 - f.dir][f.cnt + 1][f.dis]) {
        vis[f.pos + 1][1 - f.dir][f.cnt + 1][f.dis] = 1;
        Q.push(Node(f.pos + 1, 1 - f.dir, f.cnt + 1, f.dis));
      }
    } else {
      if (!vis[f.pos + 1][1 - f.dir][f.cnt][f.dis]) {
        vis[f.pos + 1][1 - f.dir][f.cnt][f.dis] = 1;
        Q.push(Node(f.pos + 1, 1 - f.dir, f.cnt, f.dis));
      }
      if (f.cnt + 1 <= limit &&
          !vis[f.pos + 1][f.dir][f.cnt + 1][f.dis + d[f.dir]]) {
        vis[f.pos + 1][f.dir][f.cnt + 1][f.dis + d[f.dir]] = 1;
        Q.push(Node(f.pos + 1, f.dir, f.cnt + 1, f.dis + d[f.dir]));
      }
    }
    if (f.cnt + 2 <= limit && !vis[f.pos][f.dir][f.cnt + 2][f.dis]) {
      vis[f.pos][f.dir][f.cnt + 2][f.dis] = 1;
      Q.push(Node(f.pos, f.dir, f.cnt + 2, f.dis));
    }
  }
  int ret = 0;
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j <= 2 * len; j++) {
      if (vis[len][i][limit][j])
        ret = ((ret) > (abs(j - len)) ? (ret) : (abs(j - len)));
    }
  }
  cout << ret << endl;
}
